On Fri, Sep 10, 2021 at 3:12 AM Maxime Ripard maxime@cerno.tech wrote:
We've encountered an issue with the RaspberryPi DSI panel that prevented the whole display driver from probing.
The issue is described in detail in the commit 7213246a803f ("drm/vc4: dsi: Only register our component once a DSI device is attached"), but the basic idea is that since the panel is probed through i2c, there's no synchronization between its probe and the registration of the MIPI-DSI host it's attached to.
We initially moved the component framework registration to the MIPI-DSI Host attach hook to make sure we register our component only when we have a DSI device attached to our MIPI-DSI host, and then use lookup our DSI device in our bind hook.
However, all the DSI bridges controlled through i2c are only registering their associated DSI device in their bridge attach hook, meaning with our change above, we never got that far, and therefore ended up in the same situation than the one we were trying to fix for panels.
The best practice to avoid those issues is to register its functions only after all its dependencies are live. We also shouldn't wait any longer than we should to play nice with the other components that are waiting for us, so in our case that would mean moving the DSI device registration to the bridge probe.
I also had a look at all the DSI hosts, and it seems that exynos, kirin and msm would be affected by this and wouldn't probe anymore after those changes. Exynos and kirin seems to be simple enough for a mechanical change (that still requires to be tested), but the changes in msm seemed to be far more important and I wasn't confortable doing them.
Hey Maxime, Sorry for taking so long to get to this, but now that plumbers is over I've had a chance to check it out on kirin
Rob Clark pointed me to his branch with some fixups here: https://gitlab.freedesktop.org/robclark/msm/-/commits/for-mripard/bridge-rew...
But trying to boot hikey with that, I see the following loop indefinitely: [ 4.632132] adv7511 2-0039: supply avdd not found, using dummy regulator [ 4.638961] adv7511 2-0039: supply dvdd not found, using dummy regulator [ 4.645741] adv7511 2-0039: supply pvdd not found, using dummy regulator [ 4.652483] adv7511 2-0039: supply a2vdd not found, using dummy regulator [ 4.659342] adv7511 2-0039: supply v3p3 not found, using dummy regulator [ 4.666086] adv7511 2-0039: supply v1p2 not found, using dummy regulator [ 4.681898] adv7511 2-0039: failed to find dsi host [ 4.688836] adv7511 2-0039: supply avdd not found, using dummy regulator [ 4.695724] adv7511 2-0039: supply dvdd not found, using dummy regulator [ 4.702583] adv7511 2-0039: supply pvdd not found, using dummy regulator [ 4.709369] adv7511 2-0039: supply a2vdd not found, using dummy regulator [ 4.716232] adv7511 2-0039: supply v3p3 not found, using dummy regulator [ 4.722972] adv7511 2-0039: supply v1p2 not found, using dummy regulator [ 4.738720] adv7511 2-0039: failed to find dsi host
I'll have to dig a bit to figure out what's going wrong, but wanted to give you the heads up that there seems to be a problem
thanks -john