[Openpvrsgx-devgroup] CI20/JZ4780 HDMI (was Re: Status & HW to bring)
H. Nikolaus Schaller
hns at goldelico.com
Mon Nov 11 20:54:13 CET 2019
Hi Paul,
> Am 11.11.2019 um 15:12 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
>
> Hi Paul,
>
>> Am 11.11.2019 um 13:32 schrieb Paul Boddie <paul at boddie.org.uk>:
>>
>> On Monday 11. November 2019 10.12.44 H. Nikolaus Schaller wrote:
>>>
>>> Ah, here is the relevant comment:
>>>
>>> https://lore.kernel.org/patchwork/patch/549312/#731123
>>>
>>> Unfortunately I have no idea what they are talking about :)
>>
>> I interpret it as the patch not using that particular week's way of doing
>> things in the Linux kernel.
>>
>>> Maybe the drivers/gpu/drm/bridge/synopsys gives hints how to improve the
>>> jz4780 driver - or the synopsys driver.
>>
>> I think there is already an upstream display driver that might be made
>> suitable:
>>
>> drivers/gpu/drm/ingenic/ingenic-drm.c
>
> This looks really good.
>
> But seems to support jz4740 and jz4725 only.
>
>> As for the Synopsys bridge driver, I wasn't convinced that anything else I
>> found was making use of it. I imagine that it must need to be wired up to some
>> other device, but it doesn't have the usual MODULE_DEVICE_TABLE declaration.
>>
>> Looking at other such drivers, it seems possible that the device tree
>> declaration would employ some input ports which then reference the output
>> ports of the display devices.
>>
>> For example, from arch/arm64/boot/dts/renesas/r8a77990.dtsi which uses the
>> lvds-encoder bridge driver:
>>
>> lvds0: lvds-encoder at feb90000 {
>> compatible = "renesas,r8a77990-lvds";
>> ...
>> ports {
>> ...
>> port at 0 {
>> ...
>> lvds0_in: endpoint {
>> remote-endpoint = <&du_out_lvds0>;
>
> Yes, this seems to resemble OMAP port/endpoint definitions.
>
>> This kind of thing isn't done in the CI20 kernel because it doesn't have a
>> shiny-enough DRM driver, and so the display device references the HDMI device
>> in the device tree, with the code confirming this:
>>
>> drivers/gpu/drm/jz4780/jz4780_drv.c
>>
>> In fact, the port/endpoint mechanism is supported in the submitted driver (see
>> above), whereas the upstream Ingenic driver doesn't have that support, perhaps
>> because many of the devices involved don't need to enable LVDS or HDMI to get
>> video working.
>>
>> So, the Ingenic driver would need to be augmented with port/endpoint support,
>> and there would need to be a way of activating the Synopsys driver in the
>> device tree. Exactly how the latter should be done remains a mystery to me at
>> the moment.
>
> It seems to be device tree compatible but has no .compatible. It includes
> include/drm/drm_of.h and include/linux/of_graph. But there is no
> config for CONFIG_DRM_DW_HDMI except _AHB_AUDIO and _CEC in
> arch/arm/configs/imx_v6_v7_defconfig
> Indeed it seems to be used in or in combination with some i.MX6 SoC?
> AFAIK the i.MX6 has no internal HDMI encoder, so the connection isn't
> clear either.
>
> Indeed quite confusing so far (and quite deviating from Openpvrsgx but we
> need some working video output interface on the CI20 board).
I took the patch set for drivers/gpu/drm/jz4780 and rebased it to v5.4-rc7
(wasn't difficult).
As expected, it fails to compile:
CC [M] drivers/gpu/drm/bridge/synopsys/dw-hdmi.o - due to target missing
CC [M] drivers/gpu/drm/ingenic/ingenic-drm.o - due to target missing
CC [M] drivers/gpu/drm/jz4780/dw_hdmi-jz4780.o - due to target missing
drivers/gpu/drm/jz4780/dw_hdmi-jz4780.c:75:38: error: array type has incomplete element type
static const struct dw_hdmi_sym_term jz4780_sym_term[] = {
^
drivers/gpu/drm/jz4780/dw_hdmi-jz4780.c:121:2: error: unknown field 'sym_term' specified in initializer
.sym_term = jz4780_sym_term,
^
drivers/gpu/drm/jz4780/dw_hdmi-jz4780.c:122:2: error: unknown field 'dev_type' specified in initializer
.dev_type = JZ4780_HDMI,
^
drivers/gpu/drm/jz4780/dw_hdmi-jz4780.c: In function 'dw_hdmi_jz4780_bind':
drivers/gpu/drm/jz4780/dw_hdmi-jz4780.c:189:2: error: too few arguments to function 'drm_encoder_init'
drm_encoder_init(drm, encoder, &dw_hdmi_jz4780_encoder_funcs,
^
In file included from ./include/drm/drm_modeset_helper_vtables.h:33:0,
from ./include/drm/drm_crtc_helper.h:43,
from drivers/gpu/drm/jz4780/dw_hdmi-jz4780.c:20:
./include/drm/drm_encoder.h:183:5: note: declared here
int drm_encoder_init(struct drm_device *dev,
^
etc.
Interestingly, it also enables the compile of drivers/gpu/drm/bridge/synopsys/dw-hdmi.o
which it seems to rely on.
If you want to take a look, I have pushed the non-compiling version:
http://git.goldelico.com/?p=gta04-kernel.git;a=shortlog;h=refs/heads/work-jz4780-hdmi
BR,
Nikolaus
More information about the openpvrsgx-devgroup
mailing list