Messages in this thread | | | Date | Mon, 04 May 2020 03:05:22 +0200 | From | Paul Cercueil <> | Subject | Re: DRM interaction problems on Ingenic CI20 / jz4780 with dw-hdmi and ingenic-drm |
| |
Hi Nikolaus,
So I just wrote a HDMI driver for a different chip, I guess I can answer some of your questions now.
Le lun. 13 avril 2020 à 13:25, Paul Cercueil <paul@crapouillou.net> a écrit : > Hi Nikolaus, > > > Le sam. 11 avril 2020 à 16:14, H. Nikolaus Schaller > <hns@goldelico.com> a écrit : >> 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. >>
This is to be used when there's no hardware interrupt. I believe you have one, right? Then call drm_kms_helper_hotplug_event() from the interrupt handler instead.
>> 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. >>
Remove that - this stuff is for hardware without interrupts, where everything has to be polled.
>> 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. >>
I'm not sure, but that information may come from EDID data. Are you able to obtain video modes from the connected monitor?
-Paul
>> If these questions should be forwarded to other specialists, please >> do so. > > It should be sent to the DRI mailing list, you missed the most > important one. > > -Paul > >> >> BR and thanks, >> Nikolaus Schaller
| |