All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jagan Teki <jagan@amarulasolutions.com>
To: Anatolij Gustschin <agust@denx.de>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Andre Przywara <andre.przywara@arm.com>,
	Kever Yang <kever.yang@rock-chips.com>,
	Simon Glass <sjg@chromium.org>, Heiko Stuebner <heiko@sntech.de>,
	Andy Yan <andyshrk@163.com>, Robin Murphy <robin.murphy@arm.com>
Cc: Da Xue <da.xue@libretech.co>,
	u-boot@lists.denx.de, Jagan Teki <jagan@edgeble.ai>
Subject: [PATCH v3 13/17] video: rockchip: Add rk3328 vop support
Date: Wed, 17 Jan 2024 13:21:50 +0530	[thread overview]
Message-ID: <20240117075154.58747-14-jagan@amarulasolutions.com> (raw)
In-Reply-To: <20240117075154.58747-1-jagan@amarulasolutions.com>

From: Jagan Teki <jagan@edgeble.ai>

Add support for Rockchip RK3328 VOP.

Require VOP cleanup before handoff to Linux by writing reset values to
WIN registers. Without this Linux VOP trigger page fault as below
[    0.752016] Loading compiled-in X.509 certificates
[    0.787796] inno_hdmi_phy_rk3328_clk_recalc_rate: parent 24000000
[    0.788391] inno-hdmi-phy ff430000.phy: inno_hdmi_phy_rk3328_clk_recalc_rate rate 148500000 vco 148500000
[    0.798353] rockchip-drm display-subsystem: bound ff370000.vop (ops vop_component_ops)
[    0.799403] dwhdmi-rockchip ff3c0000.hdmi: supply avdd-0v9 not found, using dummy regulator
[    0.800288] rk_iommu ff373f00.iommu: Enable stall request timed out, status: 0x00004b
[    0.801131] dwhdmi-rockchip ff3c0000.hdmi: supply avdd-1v8 not found, using dummy regulator
[    0.802056] rk_iommu ff373f00.iommu: Disable paging request timed out, status: 0x00004b
[    0.803233] dwhdmi-rockchip ff3c0000.hdmi: Detected HDMI TX controller v2.11a with HDCP (inno_dw_hdmi_phy2)
[    0.805355] dwhdmi-rockchip ff3c0000.hdmi: registered DesignWare HDMI I2C bus driver
[    0.808769] rockchip-drm display-subsystem: bound ff3c0000.hdmi (ops dw_hdmi_rockchip_ops)
[    0.810869] [drm] Initialized rockchip 1.0.0 20140818 for display-subsystem on minor 0

Signed-off-by: Jagan Teki <jagan@edgeble.ai>
---
Changes for v3:
- Add WIN0 disable at remove
Changes for v2:
- Add VOP cleanup
- Update commit

 drivers/video/rockchip/Makefile     |  1 +
 drivers/video/rockchip/rk3328_vop.c | 83 +++++++++++++++++++++++++++++
 2 files changed, 84 insertions(+)
 create mode 100644 drivers/video/rockchip/rk3328_vop.c

diff --git a/drivers/video/rockchip/Makefile b/drivers/video/rockchip/Makefile
index 4991303c73..f55beceebf 100644
--- a/drivers/video/rockchip/Makefile
+++ b/drivers/video/rockchip/Makefile
@@ -6,6 +6,7 @@
 ifdef CONFIG_VIDEO_ROCKCHIP
 obj-y += rk_vop.o
 obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288_vop.o
+obj-$(CONFIG_ROCKCHIP_RK3328) += rk3328_vop.o
 obj-$(CONFIG_ROCKCHIP_RK3399) += rk3399_vop.o
 obj-$(CONFIG_DISPLAY_ROCKCHIP_EDP) += rk_edp.o
 obj-$(CONFIG_DISPLAY_ROCKCHIP_LVDS) += rk_lvds.o
diff --git a/drivers/video/rockchip/rk3328_vop.c b/drivers/video/rockchip/rk3328_vop.c
new file mode 100644
index 0000000000..55233f19ee
--- /dev/null
+++ b/drivers/video/rockchip/rk3328_vop.c
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2023 Edgeble AI Technologies Pvt. Ltd.
+ */
+
+#include <dm.h>
+#include <video.h>
+#include <asm/io.h>
+#include "rk_vop.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static void rk3328_set_pin_polarity(struct udevice *dev,
+				    enum vop_modes mode, u32 polarity)
+{
+	struct rk_vop_priv *priv = dev_get_priv(dev);
+	struct rk3288_vop *regs = priv->regs;
+
+	switch (mode) {
+	case VOP_MODE_HDMI:
+		clrsetbits_le32(&regs->dsp_ctrl1,
+				M_RK3399_DSP_HDMI_POL,
+				V_RK3399_DSP_HDMI_POL(polarity));
+		break;
+	default:
+		debug("%s: unsupported output mode %x\n", __func__, mode);
+	}
+}
+
+static int rk3328_vop_probe(struct udevice *dev)
+{
+	/* Before relocation we don't need to do anything */
+	if (!(gd->flags & GD_FLG_RELOC))
+		return 0;
+
+	return rk_vop_probe(dev);
+}
+
+static int rk3328_vop_remove(struct udevice *dev)
+{
+	struct rk_vop_priv *priv = dev_get_priv(dev);
+	struct rk3288_vop *regs = priv->regs;
+	struct rk3288_vop *win_regs = priv->regs + priv->win_offset;
+
+	/* FIXME: Explicit disabling of WIN0 is needed to avoid iommu
+	 * page-fault in Linux, better handling of iommu-address in
+	 * Linux might drop this.
+	 */
+	clrbits_le32(&win_regs->win0_ctrl0, M_WIN0_EN);
+	writel(0x01, &regs->reg_cfg_done);
+
+	return 0;
+}
+
+struct rkvop_driverdata rk3328_driverdata = {
+	.dsp_offset = 0x490,
+	.win_offset = 0xd0,
+	.features = VOP_FEATURE_OUTPUT_10BIT,
+	.set_pin_polarity = rk3328_set_pin_polarity,
+};
+
+static const struct udevice_id rk3328_vop_ids[] = {
+	{
+		.compatible = "rockchip,rk3328-vop",
+		.data = (ulong)&rk3328_driverdata
+	},
+	{ /* sentile */ }
+};
+
+static const struct video_ops rk3328_vop_ops = {
+};
+
+U_BOOT_DRIVER(rk3328_vop) = {
+	.name	= "rk3328_vop",
+	.id	= UCLASS_VIDEO,
+	.of_match = rk3328_vop_ids,
+	.ops	= &rk3328_vop_ops,
+	.bind	= rk_vop_bind,
+	.probe	= rk3328_vop_probe,
+	.remove = rk3328_vop_remove,
+	.priv_auto	= sizeof(struct rk_vop_priv),
+	.flags	= DM_FLAG_PRE_RELOC | DM_FLAG_OS_PREPARE,
+};
-- 
2.25.1


  parent reply	other threads:[~2024-01-17  7:54 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-17  7:51 [PATCH v3 00/17] video: dw_hdmi: Support Vendor PHY Jagan Teki
2024-01-17  7:51 ` [PATCH v3 01/17] video: rockchip: hdmi: Detect hpd after controller init Jagan Teki
2024-01-17  7:51 ` [PATCH v3 02/17] video: dw_hdmi: Add Vendor PHY handling Jagan Teki
2024-01-17  8:58   ` Neil Armstrong
2024-01-17  7:51 ` [PATCH v3 03/17] video: dw_hdmi: Extend the HPD detection Jagan Teki
2024-01-17  8:59   ` Neil Armstrong
2024-01-17  7:51 ` [PATCH v3 04/17] video: dw_hdmi: Add read_hpd hook Jagan Teki
2024-01-17  8:59   ` Neil Armstrong
2024-01-17  7:51 ` [PATCH v3 05/17] video: dw_hdmi: Add setup_hpd hook Jagan Teki
2024-01-17  8:59   ` Neil Armstrong
2024-01-17  7:51 ` [PATCH v3 06/17] video: rockchip: vop: Simplify rkvop_enable Jagan Teki
2024-01-17  7:51 ` [PATCH v3 07/17] video: rockchip: vop: Add win offset support Jagan Teki
2024-01-17  7:51 ` [PATCH v3 08/17] video: rockchip: vop: Add dsp " Jagan Teki
2024-01-17  7:51 ` [PATCH v3 09/17] clk: rockchip: rk3328: Add VOP clk support Jagan Teki
2024-01-17  7:51 ` [PATCH v3 10/17] clk: rk3328: Add get hdmiphy clock Jagan Teki
2024-01-17  7:51 ` [PATCH v3 11/17] phy: rockchip: Add Rockchip INNO HDMI PHY driver Jagan Teki
2024-01-17  7:51 ` [PATCH v3 12/17] video: rockchip: Add rk3328 hdmi support Jagan Teki
2024-01-17  7:51 ` Jagan Teki [this message]
2024-01-17  7:51 ` [PATCH v3 14/17] ARM: dts: rk3328: Enable VOP for bootph-all Jagan Teki
2024-02-19 17:21   ` Jonas Karlman
2024-02-19 18:32     ` Jagan Teki
2024-01-17  7:51 ` [PATCH v3 15/17] rockchip: Enable preconsole for rk3328 Jagan Teki
2024-01-17  7:51 ` [PATCH v3 16/17] configs: evb-rk3328: Enable vidconsole " Jagan Teki
2024-01-17  7:51 ` [PATCH v3 17/17] configs: Enable HDMI Out for ROC-RK3328-CC Jagan Teki
2024-02-19 11:49 ` [PATCH v3 00/17] video: dw_hdmi: Support Vendor PHY Jagan Teki
2024-03-14  9:25   ` Jagan Teki
2024-04-20 23:19     ` Anatolij Gustschin

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=20240117075154.58747-14-jagan@amarulasolutions.com \
    --to=jagan@amarulasolutions.com \
    --cc=agust@denx.de \
    --cc=andre.przywara@arm.com \
    --cc=andyshrk@163.com \
    --cc=da.xue@libretech.co \
    --cc=heiko@sntech.de \
    --cc=jagan@edgeble.ai \
    --cc=kever.yang@rock-chips.com \
    --cc=neil.armstrong@linaro.org \
    --cc=robin.murphy@arm.com \
    --cc=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /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 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.