On 25.07.2018 05:56, Icenowy Zheng wrote:
Currently dw_hdmi_setup is only run when the dw-hdmi bridge is enabled, with the mode set last time.
When the bridge is enabled before any mode is set (this may happen when booting), the mode won't be set at all, some setup steps will be skipped or fail, and the HDMI output may not work.
I guess, it should not happen. Could you show the stack-trace.
Re-run dw_hdmi_setup when setting mode, in order to prevent such situation.
mode_set is run with hardware disabled, thus usually it should not touch hardware.
Signed-off-by: Icenowy Zheng icenowy@aosc.io
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index 5971976284bf..e2f832182afe 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -2007,6 +2007,7 @@ static void dw_hdmi_bridge_mode_set(struct drm_bridge *bridge,
/* Store the display mode for plugin/DKMS poweron events */ memcpy(&hdmi->previous_mode, mode, sizeof(hdmi->previous_mode));
- dw_hdmi_setup(hdmi, mode);
This hdmi->previous_mode also looks strange, it is current mode and moreover it is always available from crtc state, there is no point in copying it to private field.
Regards Andrzej
mutex_unlock(&hdmi->mutex); }