[PATCH 00/10] drm/bridge: Make panel and bridge probe order consistent

Maxime Ripard maxime at cerno.tech
Tue Jul 20 13:45:15 UTC 2021


Hi,

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.

Since the RaspberryPi panel is the only driver in that situation, whereas it
seems like there's a consensus in bridge drivers, it makes more sense to try to
mimic the bridge pattern in the panel driver.

However, panels don't have an attach hook, and adding more panel hooks would
lead to more path to maintain in each and every driver, while the general push
is towards bridges. We also have to make sure that each and every DSI host and
device driver behaves the same in order to have expectations to rely on.

The solution I'm proposing is thus done in several steps:

  - We get rid of the initial patch to make sure we support the bridge case,
    and not the odd-panel one.

  - Add a function that returns a bridge from a DT node, reducing the amount of
    churn in each and every driver and making it a real incentive to not care
    about panels in display drivers but only bridges.

  - Add an attach and detach hook into the panel operations, and make it called
    automatically by the DRM panel bridge.

  - Convert the VC4 DSI host to this new bridge function, and the RaspberryPi
    Panel to the new attach and detach hooks.

If the general approach is agreed upon, other drivers will obviously be
converted to drm_of_get_next.

Let me know what you think,
Maxime

Maxime Ripard (10):
  Revert "drm/vc4: dsi: Only register our component once a DSI device is
    attached"
  drm/bridge: Add a function to abstract away panels
  drm/bridge: Add documentation sections
  drm/bridge: Document the probe issue with MIPI-DSI bridges
  drm/panel: Create attach and detach callbacks
  drm/bridge: panel: Call attach and detach for the panel
  drm/vc4: dsi: Switch to drm_of_get_next
  drm/panel: raspberrypi-touchscreen: Prevent double-free
  drm/panel: raspberrypi-touchscreen: Use the attach hook
  drm/panel: raspberrypi-touchscreen: Remove MIPI-DSI driver

 Documentation/gpu/drm-kms-helpers.rst         |  12 ++
 drivers/gpu/drm/bridge/panel.c                |   4 +
 drivers/gpu/drm/drm_bridge.c                  | 134 ++++++++++++++-
 drivers/gpu/drm/drm_of.c                      |   3 +
 drivers/gpu/drm/drm_panel.c                   |  20 +++
 .../drm/panel/panel-raspberrypi-touchscreen.c | 159 +++++++++---------
 drivers/gpu/drm/vc4/vc4_drv.c                 |   2 +
 drivers/gpu/drm/vc4/vc4_dsi.c                 |  53 +++---
 include/drm/drm_bridge.h                      |   2 +
 include/drm/drm_panel.h                       |   6 +
 10 files changed, 273 insertions(+), 122 deletions(-)

-- 
2.31.1



More information about the dri-devel mailing list