Hello Dmitry, Maxime, DRM maintainers,

On Thu, 2 Jan 2025 13:01:40 +0100
Luca Ceresoli <luca.ceres...@bootlin.com> wrote:

> Hi Dmitry,
> 
> On Tue, 31 Dec 2024 17:29:52 +0200
> Dmitry Baryshkov <dmitry.barysh...@linaro.org> wrote:
> 
> > On Tue, Dec 31, 2024 at 11:40:04AM +0100, Luca Ceresoli wrote:  
> > > This driver implements the point of a DRM pipeline where a connector 
> > > allows
> > > removal of all the following bridges up to the panel.
> > > 
> > > The DRM subsystem currently allows hotplug of the monitor but not 
> > > preceding
> > > components. However there are embedded devices where the "tail" of the DRM
> > > pipeline, including one or more bridges, can be physically removed:
> > > 
> > >  .------------------------.
> > >  |   DISPLAY CONTROLLER   |
> > >  | .---------.   .------. |
> > >  | | ENCODER |<--| CRTC | |
> > >  | '---------'   '------' |
> > >  '------|-----------------'
> > >         |
> > >         |               HOTPLUG
> > >         V              CONNECTOR
> > >    .---------.        .--.    .-.        .---------.         .-------.
> > >    | 0 to N  |        | _|   _| |        | 1 to N  |         |       |
> > >    | BRIDGES |--DSI-->||_   |_  |--DSI-->| BRIDGES |--LVDS-->| PANEL |
> > >    |         |        |  |    | |        |         |         |       |
> > >    '---------'        '--'    '-'        '---------'         '-------'
> > > 
> > >  [--- fixed components --]  [----------- removable add-on -----------]
> > > 
> > > This driver supports such a device, where the final segment of a MIPI DSI
> > > bus, including one or more bridges, can be physically disconnected and
> > > reconnected at runtime, possibly with a different model.
> > > 
> > > The add-on supported by this driver has a MIPI DSI bus traversing the
> > > hotplug connector and a DSI to LVDS bridge and an LVDS panel on the 
> > > add-on.
> > > Hovever this driver is designed to be as far as possible generic and
> > > extendable to other busses that have no native hotplug and model ID
> > > discovery.
> > > 
> > > This driver does not itself add and remove the bridges or panel on the
> > > add-on: this needs to be done by other means, e.g. device tree overlay
> > > runtime insertion and removal. The hotplug-bridge gets notified by the DRM
> > > bridge core after a removable bridge gets added or before it is removed.
> > > 
> > > The hotplug-bridge role is to implement the "hot-pluggable connector" in
> > > the bridge chain. In this position, what the hotplug-bridge should ideally
> > > do is:
> > > 
> > >  * communicate with the previous component (bridge or encoder) so that it
> > >    believes it always has a connected bridge following it and the DRM card
> > >    is always present
> > >  * be notified of the addition and removal of the following bridge and
> > >    attach/detach to/from it
> > >  * communicate with the following bridge so that it will attach and detach
> > >    using the normal procedure (as if the entire pipeline were being 
> > > created
> > >    or destroyed, not only the tail)
> > >  * instantiate two DRM connectors (similarly to what the DisplayPort MST
> > >    code does):
> > >    - a DSI connector representing the video lines of the hotplug 
> > > connector;
> > >      the status is always "disconnected" (no panel is ever attached
> > >      directly to it)
> > >    - an LSVD connector representing the classic connection to the panel;
> > >      this gets added/removed whenever the add-on gets
> > >      connected/disconnected; the status is always "connected" as the panel
> > >      is always connected to the preceding bridge    
> > 
> > I'd rather have just a single connector. MST connectors can be added and
> > gone as there is fit, so should be your LVDS panel-related connector.  
> 
> The plan we discussed at LPC 2024 is to eventually get rid of the first
> connector (see "Roadmap and current status" in the cover letter), so
> you can consider this legacy code. However the current implementation
> won't work without this connector, so it is still there for the time
> being. Pointing this out in a note in the commit message of this patch
> would probably be useful to avoid future misunderstanding, so I'm
> adding one for v6.

Reviving this old thread for a specific question I need to clarify.
Before starting a work that I consider far from trivial I'd like to
make sure the requirement is clear.

There was a precise request by both Dmitry and (IIRC) Maxime to remove
the "always present, never connected" DSI connector.

[Recap of previous discussion: skip if unneeded]

The current status is that the hotplug-bridge, which can start without
an add-on plugged, adds a DSI connector unconditionally:

  # modetest -c  | grep -i '^[a-z0-9]'
  Connectors:
  id    encoder status          name        size (mm)     modes   encoders
  38    0       disconnected    DSI-1       0x0           0       37

That DSI connector status is always "unconnected" (in my implementation
at least) because it does never a panel _directly_ attached, only a
further bridge.

Then when the add-on is plugged, which contains a DSI-to-LVDS bridge, a
new LVDS connector is added:

  # modetest -c  | grep -i '^[a-z0-9]'
  Connectors:
  id    encoder status          name        size (mm)     modes   encoders
  38    0       disconnected    DSI-1       0x0           0       37
  39    0       connected       LVDS-1      344x194       1       37

The LVDS connector has a panel attached and provides the modes, so it
is "the connector" in the DRM logic. It is always in "connected" status
because it drives a panel that is always tied to the DSI-to-LVDS bridge.
It is removed when the add-on is removed and so the removable bridge(s)
disappear(s).

The request is to get rid of the DSI connector, because it is not a DRM
connector in the classic DRM sense (DRM connector ~= a modes +
connection status provider). That would mean without addon plugged
there is no DRM connector at all.

However for user space to be able to always have a card we need the
card to be populated even before the addon is plugged and to persist
after its removal. So, a card without any connectors.

[End of recap of previous discussion]

Now comes the question!

Based on the above, I understand that:

 * Current DRM code won't populate a card without at least a DRM
   connector
 * We now need to change the DRM code to allow populating a card,
   and expose it to user space, without a DRM connector
 * The previous bullet is a prerequisite to get rid of DSI connector as
   requested

Is my understanding correct?

Best regards,
Luca

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

Reply via email to