dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Tomi Valkeinen <tomi.valkeinen@ti.com>
To: <dri-devel@lists.freedesktop.org>
Cc: tomi.valkeinen@ti.com
Subject: [PATCH v6 08/84] drm/omap: dsi: drop virtual channel logic
Date: Tue, 15 Dec 2020 12:45:41 +0200	[thread overview]
Message-ID: <20201215104657.802264-9-tomi.valkeinen@ti.com> (raw)
In-Reply-To: <20201215104657.802264-1-tomi.valkeinen@ti.com>

From: Sebastian Reichel <sebastian.reichel@collabora.com>

This drops the virtual channel logic. Afterwards DSI clients
request their channel number and get the virtual channel with
the same number or -EBUSY if already in use.

The change here is not strictly speaking correct, as it combines the VC
(DSI's "configuration block") and virtual channel ID (the ID sent in the
DSI packets). But as we currently only support a single DSI command mode
panel, this works fine: we always use VC0, and VC ID 0.

This needs more work to support video mode panels, but that can be done
after moving to DRM bridge and panel model, after which we can do that
work with the proper APIs.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 .../gpu/drm/omapdrm/displays/panel-dsi-cm.c   | 11 ++---
 drivers/gpu/drm/omapdrm/dss/dsi.c             | 46 ++++---------------
 drivers/gpu/drm/omapdrm/dss/omapdss.h         |  4 +-
 3 files changed, 12 insertions(+), 49 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
index 6dc5a5f32e57..704d0d3309ad 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c
@@ -768,19 +768,12 @@ static int dsicm_connect(struct omap_dss_device *src,
 	struct device *dev = &ddata->pdev->dev;
 	int r;
 
-	r = src->ops->dsi.request_vc(src, &ddata->channel);
+	r = src->ops->dsi.request_vc(src, ddata->channel);
 	if (r) {
 		dev_err(dev, "failed to get virtual channel\n");
 		return r;
 	}
 
-	r = src->ops->dsi.set_vc_id(src, ddata->channel, TCH);
-	if (r) {
-		dev_err(dev, "failed to set VC_ID\n");
-		src->ops->dsi.release_vc(src, ddata->channel);
-		return r;
-	}
-
 	ddata->src = src;
 	return 0;
 }
@@ -1215,6 +1208,8 @@ static int dsicm_probe_of(struct platform_device *pdev)
 	struct display_timing timing;
 	int err;
 
+	ddata->channel = TCH;
+
 	ddata->reset_gpio = devm_gpiod_get(&pdev->dev, "reset", GPIOD_OUT_LOW);
 	if (IS_ERR(ddata->reset_gpio)) {
 		err = PTR_ERR(ddata->reset_gpio);
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index d2566992d065..84688e977a5c 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -350,7 +350,6 @@ struct dsi_data {
 		struct omap_dss_device *dssdev;
 		enum fifo_size tx_fifo_size;
 		enum fifo_size rx_fifo_size;
-		int vc_id;
 	} vc[4];
 
 	struct mutex lock;
@@ -2581,7 +2580,7 @@ static inline void dsi_vc_write_long_header(struct dsi_data *dsi, int channel,
 
 	WARN_ON(!dsi_bus_is_locked(dsi));
 
-	data_id = data_type | dsi->vc[channel].vc_id << 6;
+	data_id = data_type | channel << 6;
 
 	val = FLD_VAL(data_id, 7, 0) | FLD_VAL(len, 23, 8) |
 		FLD_VAL(ecc, 31, 24);
@@ -2685,7 +2684,7 @@ static int dsi_vc_send_short(struct dsi_data *dsi, int channel, u8 data_type,
 		return -EINVAL;
 	}
 
-	data_id = data_type | dsi->vc[channel].vc_id << 6;
+	data_id = data_type | channel << 6;
 
 	r = (data_id << 0) | (data << 8) | (ecc << 24);
 
@@ -4787,45 +4786,19 @@ static enum omap_channel dsi_get_channel(struct dsi_data *dsi)
 	}
 }
 
-static int dsi_request_vc(struct omap_dss_device *dssdev, int *channel)
+static int dsi_request_vc(struct omap_dss_device *dssdev, int channel)
 {
 	struct dsi_data *dsi = to_dsi_data(dssdev);
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(dsi->vc); i++) {
-		if (!dsi->vc[i].dssdev) {
-			dsi->vc[i].dssdev = dssdev;
-			*channel = i;
-			return 0;
-		}
-	}
 
-	DSSERR("cannot get VC for display %s", dssdev->name);
-	return -ENOSPC;
-}
-
-static int dsi_set_vc_id(struct omap_dss_device *dssdev, int channel, int vc_id)
-{
-	struct dsi_data *dsi = to_dsi_data(dssdev);
-
-	if (vc_id < 0 || vc_id > 3) {
-		DSSERR("VC ID out of range\n");
-		return -EINVAL;
-	}
-
-	if (channel < 0 || channel > 3) {
-		DSSERR("Virtual Channel out of range\n");
+	if (channel < 0 || channel > 3)
 		return -EINVAL;
-	}
 
-	if (dsi->vc[channel].dssdev != dssdev) {
-		DSSERR("Virtual Channel not allocated to display %s\n",
-			dssdev->name);
-		return -EINVAL;
+	if (dsi->vc[channel].dssdev) {
+		DSSERR("cannot get VC for display %s", dssdev->name);
+		return -EBUSY;
 	}
 
-	dsi->vc[channel].vc_id = vc_id;
-
+	dsi->vc[channel].dssdev = dssdev;
 	return 0;
 }
 
@@ -4836,7 +4809,6 @@ static void dsi_release_vc(struct omap_dss_device *dssdev, int channel)
 	if ((channel >= 0 && channel <= 3) &&
 		dsi->vc[channel].dssdev == dssdev) {
 		dsi->vc[channel].dssdev = NULL;
-		dsi->vc[channel].vc_id = 0;
 	}
 }
 
@@ -4943,7 +4915,6 @@ static const struct omap_dss_device_ops dsi_ops = {
 		.enable_te = dsi_enable_te,
 
 		.request_vc = dsi_request_vc,
-		.set_vc_id = dsi_set_vc_id,
 		.release_vc = dsi_release_vc,
 
 		.transfer = omap_dsi_transfer,
@@ -5399,7 +5370,6 @@ static int dsi_probe(struct platform_device *pdev)
 	for (i = 0; i < ARRAY_SIZE(dsi->vc); i++) {
 		dsi->vc[i].source = DSI_VC_SOURCE_L4;
 		dsi->vc[i].dssdev = NULL;
-		dsi->vc[i].vc_id = 0;
 	}
 
 	r = dsi_get_clocks(dsi);
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 88b73188203e..f64af9601752 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -302,9 +302,7 @@ struct omapdss_dsi_ops {
 	void (*disable_video_output)(struct omap_dss_device *dssdev,
 			int channel);
 
-	int (*request_vc)(struct omap_dss_device *dssdev, int *channel);
-	int (*set_vc_id)(struct omap_dss_device *dssdev, int channel,
-			int vc_id);
+	int (*request_vc)(struct omap_dss_device *dssdev, int channel);
 	void (*release_vc)(struct omap_dss_device *dssdev, int channel);
 
 	/* data transfer */
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

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

  parent reply	other threads:[~2020-12-15 10:47 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-15 10:45 [PATCH v6 00/84] Convert DSI code to use drm_mipi_dsi and drm_panel Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 01/84] Revert "drm/omap: dss: Remove unused omap_dss_device operations" Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 02/84] drm/omap: drop unused dsi.configure_pins Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 03/84] drm/omap: dsi: use MIPI_DSI_FMT_* instead of OMAP_DSS_DSI_FMT_* Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 04/84] drm/omap: constify write buffers Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 05/84] drm/omap: dsi: add generic transfer function Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 06/84] drm/omap: panel-dsi-cm: convert to transfer API Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 07/84] drm/omap: dsi: unexport specific data transfer functions Tomi Valkeinen
2020-12-15 10:45 ` Tomi Valkeinen [this message]
2020-12-15 10:45 ` [PATCH v6 09/84] drm/omap: dsi: simplify write function Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 10/84] drm/omap: dsi: simplify read functions Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 11/84] drm/omap: dsi: switch dsi_vc_send_long/short to mipi_dsi_msg Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 12/84] drm/omap: dsi: introduce mipi_dsi_host Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 13/84] drm/omap: panel-dsi-cm: use DSI helpers Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 14/84] drm/omap: dsi: request VC via mipi_dsi_attach Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 15/84] drm/omap: panel-dsi-cm: drop hardcoded VC Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 16/84] drm/omap: panel-dsi-cm: use common MIPI DCS 1.3 defines Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 17/84] drm/omap: dsi: drop unused memory_read() Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 18/84] drm/omap: dsi: drop unused get_te() Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 19/84] drm/omap: dsi: drop unused enable_te() Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 20/84] drm/omap: dsi: drop useless sync() Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 21/84] drm/omap: dsi: use pixel-format and mode from attach Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 22/84] drm/omap: panel-dsi-cm: use bulk regulator API Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 23/84] drm/omap: dsi: lp/hs switching support for transfer() Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 24/84] drm/omap: dsi: move TE GPIO handling into core Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 25/84] drm/omap: dsi: drop custom enable_te() API Tomi Valkeinen
2020-12-15 10:45 ` [PATCH v6 26/84] drm/omap: dsi: do bus locking in host driver Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 27/84] drm/omap: dsi: untangle ulps ops from enable/disable Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 28/84] drm/omap: dsi: do ULPS in host driver Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 29/84] drm/omap: dsi: move panel refresh function to host Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 30/84] drm/omap: dsi: Reverse direction of the DSS device enable/disable operations Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 31/84] drm/omap: dsi: drop custom panel capability support Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 32/84] drm/omap: dsi: convert to drm_panel Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 33/84] drm/omap: drop omapdss-boot-init Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 34/84] drm/omap: dsi: implement check timings Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 35/84] drm/omap: panel-dsi-cm: use DEVICE_ATTR_RO Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 36/84] drm/omap: panel-dsi-cm: support unbinding Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 37/84] drm/omap: panel-dsi-cm: fix remove() Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 38/84] drm/omap: remove global dss_device variable Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 39/84] drm/panel: Move OMAP's DSI command mode panel driver Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 40/84] drm/omap: dsi: Register a drm_bridge Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 41/84] drm/omap: remove legacy DSS device operations Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 42/84] drm/omap: remove unused omap_connector Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 43/84] drm/omap: simplify omap_display_id Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 44/84] drm/omap: drop unused DSS next pointer Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 45/84] drm/omap: drop DSS ops_flags Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 46/84] drm/omap: drop dssdev display field Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 47/84] drm/omap: simplify DSI manual update code Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 48/84] drm/omap: dsi: simplify pin config Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 49/84] ARM: omap2plus_defconfig: Update for moved DSI command mode panel Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 50/84] drm/omap: squash omapdrm sub-modules into one Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 51/84] drm/omap: remove unused display.c Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 52/84] drm/omap: drop unused owner field Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 53/84] drm/omap: remove dispc_ops Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 54/84] drm/omap: remove dss_mgr_ops Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 55/84] drm/panel: panel-dsi-cm: use MIPI_DCS_GET_ERROR_COUNT_ON_DSI Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 56/84] drm/panel: panel-dsi-cm: cleanup tear enable Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 57/84] ARM: dts: omap5: add address-cells & size-cells to dsi Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 58/84] drm/omap: pll: fix iteration loop check Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 59/84] drm/omap: dsi: set trans_mode according to client mode_flags Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 60/84] drm/panel: panel-dsi-cm: set column & page at setup Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 61/84] drm/omap: dsi: send nop instead of page & column Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 62/84] drm/omap: dsi: simplify VC handling Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 63/84] drm/omap: dsi: drop useless channel checks Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 64/84] drm/omap: dsi: cleanup dispc channel usage Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 65/84] drm/omap: dsi: rename 'channel' to 'vc' Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 66/84] drm/omap: dsi: pass vc and channel to various functions Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 67/84] drm/omap: dsi: untangle vc & channel Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 68/84] drm/omap: dsi: skip dsi_vc_enable_hs when already in correct mode Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 69/84] drm/omap: dsi: enable HS before sending the frame Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 70/84] drm/omap: dsi: use separate VCs for cmd and video Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 71/84] drm/panel: panel-dsi-cm: remove extra 'if' Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 72/84] drm/panel: panel-dsi-cm: add panel database to driver Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 73/84] drm/panel: panel-dsi-cm: drop unneeded includes Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 74/84] drm/omap: dsi: move structs & defines to dsi.h Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 75/84] drm/omap: dsi: move enable/disable to bridge enable/disable Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 76/84] drm/omap: dsi: display_enable cleanup Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 77/84] drm/omap: dsi: display_disable cleanup Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 78/84] drm/omap: dsi: rename dsi_display_* functions Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 79/84] drm/omap: dsi: cleanup initial vc setup Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 80/84] drm/omap: dsi: split video mode enable/disable into separate func Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 81/84] drm/omap: dsi: fix and cleanup ddr_clk_always_on Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 82/84] drm/omap: dsi: remove ulps support Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 83/84] drm/omap: dsi: fix DCS_CMD_ENABLE Tomi Valkeinen
2020-12-15 10:46 ` [PATCH v6 84/84] drm/omap: dsi: allow DSI commands to be sent early Tomi Valkeinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201215104657.802264-9-tomi.valkeinen@ti.com \
    --to=tomi.valkeinen@ti.com \
    --cc=dri-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).