All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/8] drm/rockchip: migrate to common dw-mipi-dsi bridge and dual-dsi
@ 2018-07-09 13:48 Heiko Stuebner
  2018-07-09 13:48 ` [PATCH v3 1/8] drm/bridge/synopsys: dsi: move mipi_dsi_host_unregister to __dw_mipi_dsi_remove Heiko Stuebner
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Heiko Stuebner @ 2018-07-09 13:48 UTC (permalink / raw)
  To: dri-devel
  Cc: mark.rutland, devicetree, briannorris, hoegsberg, philippe.cornu,
	yannick.fertre, linux-rockchip, nickey.yang, robh+dt,
	thierry.reding, laurent.pinchart, mka

The Rockchip DSI driver was separate till now, not using the common
bridge driver that was introduced a bit later. So this series migrates
over to use that common bridge driver and then also adds support for
dual-dsi to both the bridge and Rockchip glue code.

The bridge-migration itself is based on Nickeys earlier v8
work, but adapted to current kernels and with a new split between probe
and bind, so that we do not create and drop the dsi-host on each deferred
bind attempt.

changes in v2:
- rebase against newer drm code (dsi-bridge+rockchip changes)
- add SPDX header to new glue driver
- expect regular interface lanes from panel (like 4) not the double number
  Similar to tegra
- keep links to both master and slave
changes in v3:
- don't defer in bridge_attach, instead add ability to check for finalized
  panel attachement, for example in bind
- address bridge-conversion comments from Andrzej:
  - include ordering
  - moved hwaccess from mode_set to enable callback
  - move pllref_clk enablement to bind (needed by bridge mode_set->lane_mbps)
- limited slave settings to dw_mipi_dsi_set_slave
- address dual-dsi comments from Philippe:
  - remove unneeded separate variables
  - remove unneeded second slave settings
  - disable slave before master
  - lane-sum calculation comments

Unchanged from review comments:
- kept dw_mipi_dsi_bind, as the dsi->bridge member is only part of the
  bridge drivers struct, so not accessible from glue drivers
- kept panel deferral in rk-bind, as the dsi bus containing the panel will
  only be created during probe, so this gives the system a chance to probe
  the panel between probe and bind calls, saving around 2 deferral rounds
  on my Gru-Scarlet - when compared to always deferring during probe.
  (panel module-load time + async probing)
  + of course saving time not re-creating the dsi bus on each probe try
- kept helper to find second host, as I think it's pretty near to
  Archit's description
- kept dual-dsi handling that mimicks tegra for now


Cover-letter blurb from v2:
---------------------------

The dual-dsi setup follows the port description introduced by Archit [0],
in that the panel defines two input ports that get connected to both
dsi-controllers instances. So on Gru-Scarlett this looks for example
like:

&mipi_dsi {
	status = "okay";
	clock-master;

	ports {
		mipi_out: port@1 {
			reg = <1>;

			mipi_out_panel: endpoint {
				remote-endpoint = <&mipi_in_panel>;
			};
		};
	};

	mipi_panel: panel@0 {
		/* 2 different panels are used, compatibles are in dts files */
		reg = <0>;
		backlight = <&backlight>;
		enable-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&display_rst_l>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;

				mipi_in_panel: endpoint {
					remote-endpoint = <&mipi_out_panel>;
				};
			};

			port@1 {
				reg = <1>;

				mipi1_in_panel: endpoint@1 {
					remote-endpoint = <&mipi1_out_panel>;
				};
			};
		};
	};
};

&mipi_dsi1 {
	status = "okay";

	ports {
		mipi1_out: port@1 {
			reg = <1>;

			mipi1_out_panel: endpoint {
				remote-endpoint = <&mipi1_in_panel>;
			};
		};
	};
};


The driver internal setup is pretty similar to what tegra does with
its ganged-mode [1][2]. But here a new helper function allows to traverse
the devicetree from one controller port through the panel to find
another dsi-controller using that same panel. This way we don't need
a special phandle-property to link the controllers together.

For the CRTC it is still one single display to handle, only with
an additional switch that enables the dual-dsi output.


For practical purposes it is possible to just pick half the series
(till patch 5) to get the migration to the bridge driver first,
so that we can get rid of the dw-dsi copy in the Rockchip driver.

But of course Acks / Reviews of the dsi-bridge changes would be needed.


[0] https://patchwork.kernel.org/patch/10172381/
[1] https://lkml.org/lkml/2014/8/5/396
[2] https://patchwork.kernel.org/patch/5075161/


Heiko Stuebner (5):
  drm/bridge/synopsys: dsi: move mipi_dsi_host_unregister to
    __dw_mipi_dsi_remove
  drm/bridge/synopsys: dsi: don't call __dw_mipi_dsi_probe from
    dw_mipi_dsi_bind
  drm/bridge/synopsys: dsi: add ability to check dsi-device attachment
  drm/dsi: add helper function to find the second host in a dual-dsi
    setup
  drm/rockchip: dsi: add dual mipi support

Nickey Yang (3):
  dt-bindings: display: rockchip: update DSI controller
  drm/rockchip: dsi: migrate to use dw-mipi-dsi bridge driver
  drm/bridge/synopsys: dsi: add dual-dsi support

 .../display/rockchip/dw_mipi_dsi_rockchip.txt |   23 +-
 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c |  124 +-
 drivers/gpu/drm/drm_mipi_dsi.c                |   56 +
 drivers/gpu/drm/rockchip/Kconfig              |    2 +-
 drivers/gpu/drm/rockchip/Makefile             |    2 +-
 .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c   | 1005 ++++++++++++
 drivers/gpu/drm/rockchip/dw-mipi-dsi.c        | 1349 -----------------
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c   |    2 +-
 drivers/gpu/drm/rockchip/rockchip_drm_drv.h   |    3 +-
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c   |    3 +
 drivers/gpu/drm/rockchip/rockchip_drm_vop.h   |    4 +
 drivers/gpu/drm/rockchip/rockchip_vop_reg.c   |    1 +
 include/drm/bridge/dw_mipi_dsi.h              |    7 +-
 include/drm/drm_mipi_dsi.h                    |    2 +
 14 files changed, 1204 insertions(+), 1379 deletions(-)
 create mode 100644 drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c
 delete mode 100644 drivers/gpu/drm/rockchip/dw-mipi-dsi.c

-- 
2.17.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2018-08-14  7:49 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-09 13:48 [PATCH v3 0/8] drm/rockchip: migrate to common dw-mipi-dsi bridge and dual-dsi Heiko Stuebner
2018-07-09 13:48 ` [PATCH v3 1/8] drm/bridge/synopsys: dsi: move mipi_dsi_host_unregister to __dw_mipi_dsi_remove Heiko Stuebner
2018-07-09 13:48 ` [PATCH v3 2/8] drm/bridge/synopsys: dsi: don't call __dw_mipi_dsi_probe from dw_mipi_dsi_bind Heiko Stuebner
2018-08-13  8:07   ` Andrzej Hajda
2018-07-09 13:48 ` [PATCH v3 3/8] drm/bridge/synopsys: dsi: add ability to check dsi-device attachment Heiko Stuebner
2018-08-13  8:28   ` Andrzej Hajda
2018-08-13  8:44     ` Heiko Stuebner
2018-08-13 10:23       ` Andrzej Hajda
2018-08-14  7:49         ` Heiko Stuebner
2018-07-09 13:48 ` [PATCH v3 4/8] dt-bindings: display: rockchip: update DSI controller Heiko Stuebner
2018-07-09 13:48 ` [PATCH v3 5/8] drm/rockchip: dsi: migrate to use dw-mipi-dsi bridge driver Heiko Stuebner
2018-07-09 13:48 ` [PATCH v3 6/8] drm/dsi: add helper function to find the second host in a dual-dsi setup Heiko Stuebner
     [not found] ` <20180709134834.11035-1-heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
2018-07-09 13:48   ` [PATCH v3 7/8] drm/bridge/synopsys: dsi: add dual-dsi support Heiko Stuebner
2018-07-09 13:48   ` [PATCH v3 8/8] drm/rockchip: dsi: add dual mipi support Heiko Stuebner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.