DRM interaction problems on Ingenic CI20 / jz4780 with dw-hdmi and ingenic-drm

From: H. Nikolaus Schaller
Date: Sat Apr 11 2020 - 10:15:01 EST


Hi,
we (Paul Boddie and me) are working to get HDMI functional on the
Ingenic CI20 board with jz4780 SoC which uses a specialization of
the dw-hdmi driver.


So far we have identified two issues.

The first is that HPD interrupts are not properly processed.

drm_helper_hpd_irq_event() is called by HPD events but
dev->mode_config.poll_enabled is false.

Therefore the interrupt is ignored and nothing happens.

Now I wonder about the logic behind checking for poll_enabled.
I understand that a driver can do either polling or irq or both.

Therefore handling the irq_event shouldn't be disabled by poll_enabled
being false. Otherwise we can only do: nothing, polling, polling+irq
but not irq alone.

The jz4780 hdmi subsystem (drm/bridge/dw-hdmi.c) uses

connector->polled = DRM_CONNECTOR_POLL_HPD;

but shouldn't this enable polling? Note that there seems to be
no (direct) call to drm_kms_helper_poll_init().

If we set dev->mode_config.poll_enabled = true in
drm_helper_hpd_irq_event() things start to work.

Please can you clarify what would be best practise here to
get HPD event handling working.


The other issue is in dw-hdmi.c:

We found out that ingenic_drm_encoder_atomic_check() fails because

info->num_bus_formats == 0

and not 1. This blocks further initialization.

The reason seems to be that dw_hdmi_bridge_attach() does not call
drm_display_info_set_bus_formats() with a proper format like
other drivers (e.g. drm/bridge/ti-tfp410.c) are doing.

We have patched to set a single bus format MEDIA_BUS_FMT_RGB888_1X24
and then DRM setup seems to work (although we still have no valid
HDMI signal but that is likely something else).

Please can you explain how setting the bus format should be fixed
in dw-hdmi.c.

If these questions should be forwarded to other specialists, please
do so.


BR and thanks,
Nikolaus Schaller