BUG: drm_crtc_helper_set_config does not work
Maarten Maathuis
madman2003 at gmail.com
Fri Mar 9 10:27:14 PST 2012
On Fri, Mar 9, 2012 at 5:28 PM, Yufeng Shen <miletus at chromium.org> wrote:
> On Fri, Mar 9, 2012 at 3:15 AM, Maarten Maathuis <madman2003 at gmail.com> wrote:
>> On Fri, Mar 9, 2012 at 2:50 AM, Yufeng Shen <miletus at chromium.org> wrote:
>>> So a simple case of disabling a CRTC and then re-enabling it.
>>>
>>> Disabling:
>>>
>>> CRTC X is originally connected to output Y
>>>
>>> 1. XRRSetCrtcConfig() is called to disable CRTC X
>>>
>>> 2. drm_helper_connector_dpms() then gets called on the connector
>>> connected to CRTC X,
>>> in the function,
>>> the connector->encoder is set to DPMS OFF, and the
>>> encoder->crtc set to DPMS OFF
>>> but the encoder->crtc is still CRTC X
>>>
>>> Re-enabling:
>>>
>>> 3. XRRSetCrtcConfig() is called to to enable CRTC X on output Y
>>>
>>> 4. drm_crtc_helper_set_config () is now called,
>>> suppose fb is not changed, mode is not changed, encoder is not changed
>>> and the encoder->crtc is not changed,
>>> then we have mode_changed == false and the mode is not reset
>>>
>>> So the CRTC X won't be connected to output Y.
>>>
>>> What I don't understand the code is that why XRRSetCrtcConfig() ends
>>> up only calling drm_helper_connector_dpms() ?
>>> I think it should do more than that, at least it should set the
>>> related encoder->crtc = NULL
>>>
>>> any comments ?
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>>
>> As far as i know DPMS designed is a simple switch, meaning that the
>> mode remains active, so if you do DPMS ON it should come back. If for
>> some reason the driver is disconnecting the encoder from the crtc,
>> then it is the drivers responsibility to reconnect it when DPMS ON
>> happens.
>>
>> But don't take my word for it, others may have more/other information.
>>
>
> Yes, I was thinking ideally DPMS call should enable/disable DPMS state, and
> XRRSetCrtcConfig call should enable/disable CRTC.
>
> But it seems that, when using XRRSetCrtcConfig to disable CRTC,
> the CRTC itself is disabled, the DPMS is disabled (DPMS OFF),
> and then when using XRRSetCrtcConfig to re-enable the CRTC,
> it only checks whether the CRTC that connected to the encoder is
> changed (whether a new crtc is assigned), but does not check whether
> the CRTC itself is previously disabled or not. So it considers the encoder
> is connected to the same CRTC and does no thing to re-enable the CRTC.
>
>
>> --
>> Far away from the primal instinct, the song seems to fade away, the
>> river get wider between your thoughts and the things we do and say.
What i meant is that you should get a DPMS ON call somewhere in the
driver. The driver should then re-enable things. If the driver
disconnects the encoder for DPMS OFF, then it will also have to
reconnect it for DPMS ON.
--
Far away from the primal instinct, the song seems to fade away, the
river get wider between your thoughts and the things we do and say.
More information about the dri-devel
mailing list