[PATCH] drm/ast: Fix default resolution when no monitor is connected on DP

Jocelyn Falempe jfalempe at redhat.com
Thu Jul 6 09:16:33 UTC 2023


On 04/07/2023 18:45, Jocelyn Falempe wrote:
> On 04/07/2023 16:54, Jani Nikula wrote:
>> On Fri, 23 Jun 2023, Jocelyn Falempe <jfalempe at redhat.com> wrote:
>>> Since commit fae7d186403e ("drm/probe-helper: Default to 640x480 if no
>>>   EDID on DP")
>>> The default resolution is now 640x480 when no monitor is connected.
>>> But Aspeed graphics is mostly used in servers, where no monitor
>>> is attached. This also affects the "remote" resolution to 640x480, 
>>> which is
>>> inconvenient, and breaks the anaconda installer.
>>> So when no EDID is present, set 1024x768 as preferred resolution.
>>
>> This conflates "monitor connected" and "EDID present", which are not
>> necessarily the same thing.
>>
>> The fallback in drm_helper_probe_single_connector_modes() is for no
>> modes, but connector status is connected or unknown.
> 
> When debugging the issue, I found it surprising that the status is 
> "connected" when nothing is plugged in the DP port.
>>
>> You could add a connector ->detect callback that returns disconnected
>> when there's no display, and the problem should go away. If there's no
>> ->detect callback, it'll default to connected.
> 
> ok, I'll try that. I don't know how the hardware detect something is 
> connected, but looking at the dp code, maybe checking 
> "AST_IO_CRTC_PORT,0xDC, ASTDP_LINK_SUCCESS" would be good enough.

I've tested this approach, and it works. But on the server I'm testing, 
there are VGA and DP output. I think on a server that has only one DP 
output, if no monitor is connected, then no modes will be reported to 
userspace, and the remote BMC may not work ?

Also I don't have physical access to the server, so I only tested when 
no monitor is plugged.

I will send shortly a v2 with this change, so others can help me test 
this case.

Best regards,

-- 

Jocelyn


> 
>>
>>> Fixes: fae7d186403e ("drm/probe-helper: Default to 640x480 if no EDID 
>>> on DP")
>>> Signed-off-by: Jocelyn Falempe <jfalempe at redhat.com>
>>> ---
>>>   drivers/gpu/drm/ast/ast_mode.c | 26 ++++++++++++++++++++++++--
>>>   1 file changed, 24 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/ast/ast_mode.c 
>>> b/drivers/gpu/drm/ast/ast_mode.c
>>> index 36374828f6c8..8f7b7cc021c7 100644
>>> --- a/drivers/gpu/drm/ast/ast_mode.c
>>> +++ b/drivers/gpu/drm/ast/ast_mode.c
>>> @@ -1589,9 +1589,31 @@ static const struct drm_connector_helper_funcs 
>>> ast_dp501_connector_helper_funcs
>>>       .get_modes = ast_dp501_connector_helper_get_modes,
>>>   };
>>> +static int ast_dp_probe_single_connector_modes(struct drm_connector 
>>> *connector,
>>> +                           uint32_t maxX, uint32_t maxY)
>>> +{
>>> +    int ret;
>>> +    struct drm_display_mode *mode;
>>> +
>>> +    ret = drm_helper_probe_single_connector_modes(connector, maxX, 
>>> maxY);
>>> +    /*
>>> +     * When no monitor are detected, DP now default to 640x480
>>> +     * As aspeed is mostly used in remote server, and DP monitors are
>>> +     * rarely attached, it's better to default to 1024x768
>>> +     */
>>> +    if (!connector->edid_blob_ptr) {
>>
>> Please try not to use connector->edid_blob_ptr for anything in
>> drivers. The logic is complicated enough as it is, with the firmware and
>> override EDIDs and everything, and makes future refactoring of EDID
>> handling harder.
> 
> Ok, I will try your other suggestion, and remove this.
> 
> Thanks a lot for your comments.
> 



More information about the dri-devel mailing list