On Mon, Aug 29, 2022 at 3:36 PM Neil Armstrong <narmstrong@xxxxxxxxxxxx> wrote: > On 25/08/2022 14:48, Linus Walleij wrote: > > On Wed, Aug 17, 2022 at 3:31 PM Neil Armstrong <narmstrong@xxxxxxxxxxxx> wrote: > >> On 15/08/2022 02:15, Dmitry Osipenko wrote: > >>> 08.08.2022 12:51, Neil Armstrong пишет: > >>>> On 08/08/2022 11:15, Neil Armstrong wrote: > > > >>>>>> This patch broke ARM/QEMU vexpress display because of_drm_find_bridge() > >>>>>> always fail with -EPROBE_DEFER. Reverting this patch returns display > >>>>>> back. Please fix or revert, thanks in advance. > >>>>> > >>>>> Can you share a QEMU cmdline to reproduce ? > >>>> > >>>> Actually the vexpress DT has multiple input ports instead of a single > >>>> input port at @0 > >>>> and an output port at @1 like documented in the bindings: > >>>> > >>>> vexpress-v2m.dtsi#L303-L307: > >>>> ports { > >>>> #address-cells = <1>; > >>>> #size-cells = <0>; > >>>> > >>>> /* > >>>> * Both the core tile and the motherboard routes their output > >>>> * pads to this transmitter. The motherboard system controller > >>>> * can select one of them as input using a mux register in > >>>> * "arm,vexpress-muxfpga". The Vexpress with the CA9 core tile is > >>>> * the only platform with this specific set-up. > >>>> */ > >>>> port@0 { > >>>> reg = <0>; > >>>> dvi_bridge_in_ct: endpoint { > >>>> remote-endpoint = <&clcd_pads_ct>; > >>>> }; > >>>> }; > >>>> port@1 { > >>>> reg = <1>; > >>>> dvi_bridge_in_mb: endpoint { > >>>> remote-endpoint = <&clcd_pads_mb>; > >>>> }; > >>>> }; > >>>> }; > >>>> > >>>> bindings: > >>>> ports: > >>>> $ref: /schemas/graph.yaml#/properties/ports > >>>> > >>>> properties: > >>>> port@0: > >>>> $ref: /schemas/graph.yaml#/properties/port > >>>> description: Parallel RGB input port > >>>> > >>>> port@1: > >>>> $ref: /schemas/graph.yaml#/properties/port > >>>> description: HDMI output port > >>>> > >>>> port@3: > >>>> $ref: /schemas/graph.yaml#/properties/port > >>>> description: Sound input port > >>>> > >>>> The patch is conform to the bindings, the DT was working but is actually > >>>> not valid. > >>> > >>> I haven't looked closely at how to fix this properly, but if we can fix > >>> it using of_machine_is_compatible("arm,vexpress") workaround in the > >>> driver, then it will be good enough at least as a temporal fix, IMO. > >> > >> If other maintainers are ok with that, it can be temporary fix until the DT gets fixed. > > > > That's fine with me, will you send a patch? > > Who, me ? Whoever you were referring to with the "temporary fix" :D > > I don't know how you expect the DT to get "fixed" though. > > > > The hardware looks like this, it's maybe not the most elegant > > electronics design but it exists, so... I wrote this DT with two > > inputs, see commit f1fe12c8bf332, the code handling this > > awkward mux is part of the DRM driver, see > > drivers/gpu/drm/pl111/pl111_versatile.c function > > pl111_vexpress_clcd_init() for an idea of how it works. > > The proper fix would be the other way around, adding a mux bridge before the sii902x > returning the next bridge or nothing to the right controller. Hm you mean the vexpress PLD should be a bridge and not just some magic registers poked by the DRM driver? OK fair point. But it will need proper representing in the DT then, I guess that is what you mean by "DT gets fixed". It's not just the DT that needs fixing then but also the driver(s). Yours, Linus Walleij