From: Andy Yan <andyshrk@163.com>
To: heiko@sntech.de
Cc: hjc@rock-chips.com, krzk+dt@kernel.org, robh@kernel.org,
conor+dt@kernel.org, s.hauer@pengutronix.de,
devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org,
derek.foreman@collabora.com, minhuadotchen@gmail.com,
detlev.casanova@collabora.com, Andy Yan <andy.yan@rock-chips.com>
Subject: [PATCH v3 10/15] drm/rockchip: vop2: Introduce vop hardware version
Date: Fri, 20 Sep 2024 16:22:06 +0800 [thread overview]
Message-ID: <20240920082207.6863-1-andyshrk@163.com> (raw)
In-Reply-To: <20240920081626.6433-1-andyshrk@163.com>
From: Andy Yan <andy.yan@rock-chips.com>
There is a version number hardcoded in the VOP VERSION_INFO
register, and the version number increments sequentially based
on the production order of the SOC.
So using this version number to distinguish different VOP features
will simplify the code.
Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
---
Changes in v3:
- Add comments for why we should treat rk3566 with special care.
- Add hardware version check
Changes in v2:
- Introduce vop hardware version
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 17 ++++++++++++++---
drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 11 +++++++++++
drivers/gpu/drm/rockchip/rockchip_vop2_reg.c | 3 +++
3 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index 6a7982ad3550..b4964c70149f 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -354,7 +354,7 @@ static bool vop2_output_uv_swap(u32 bus_format, u32 output_mode)
static bool vop2_output_rg_swap(struct vop2 *vop2, u32 bus_format)
{
- if (vop2->data->soc_id == 3588) {
+ if (vop2->version == VOP_VERSION_RK3588) {
if (bus_format == MEDIA_BUS_FMT_YUV8_1X24 ||
bus_format == MEDIA_BUS_FMT_YUV10_1X30)
return true;
@@ -798,6 +798,7 @@ static void rk3588_vop2_power_domain_enable_all(struct vop2 *vop2)
static void vop2_enable(struct vop2 *vop2)
{
int ret;
+ u32 version;
ret = pm_runtime_resume_and_get(vop2->dev);
if (ret < 0) {
@@ -817,10 +818,19 @@ static void vop2_enable(struct vop2 *vop2)
return;
}
+ version = vop2_readl(vop2, RK3568_VERSION_INFO);
+ if (version != vop2->version) {
+ drm_err(vop2->drm, "Hardware version(0x%08x) mismatch\n", version);
+ return;
+ }
+ /*
+ * rk3566 share the same vop version with rk3568, so
+ * wen need to use soc_id for identification here.
+ */
if (vop2->data->soc_id == 3566)
vop2_writel(vop2, RK3568_OTP_WIN_EN, 1);
- if (vop2->data->soc_id == 3588)
+ if (vop2->version == VOP_VERSION_RK3588)
rk3588_vop2_power_domain_enable_all(vop2);
vop2_writel(vop2, RK3568_REG_CFG_DONE, RK3568_REG_CFG_DONE__GLB_CFG_DONE_EN);
@@ -1231,7 +1241,7 @@ static void vop2_plane_atomic_update(struct drm_plane *plane,
* this bit is gating disable, we should write 1 to
* disable gating when enable afbc.
*/
- if (vop2->data->soc_id == 3566 || vop2->data->soc_id == 3568)
+ if (vop2->version == VOP_VERSION_RK3568)
vop2_win_write(win, VOP2_WIN_AFBC_AUTO_GATING_EN, 0);
else
vop2_win_write(win, VOP2_WIN_AFBC_AUTO_GATING_EN, 1);
@@ -2320,6 +2330,7 @@ static int vop2_bind(struct device *dev, struct device *master, void *data)
vop2->dev = dev;
vop2->data = vop2_data;
vop2->ops = vop2_data->ops;
+ vop2->version = vop2_data->version;
vop2->drm = drm;
dev_set_drvdata(dev, vop2);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h
index 9b269f6e576e..871d9bcd1d80 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.h
@@ -13,6 +13,15 @@
#include "rockchip_drm_drv.h"
#include "rockchip_drm_vop.h"
+#define VOP2_VERSION(major, minor, build) ((major) << 24 | (minor) << 16 | (build))
+
+/* The new SOC VOP version is bigger than the old */
+#define VOP_VERSION_RK3568 VOP2_VERSION(0x40, 0x15, 0x8023)
+#define VOP_VERSION_RK3588 VOP2_VERSION(0x40, 0x17, 0x6786)
+#define VOP_VERSION_RK3528 VOP2_VERSION(0x50, 0x17, 0x1263)
+#define VOP_VERSION_RK3562 VOP2_VERSION(0x50, 0x17, 0x4350)
+#define VOP_VERSION_RK3576 VOP2_VERSION(0x50, 0x19, 0x9765)
+
#define VOP2_VP_FEATURE_OUTPUT_10BIT BIT(0)
#define VOP2_FEATURE_HAS_SYS_GRF BIT(0)
@@ -235,6 +244,7 @@ struct vop2_ops {
struct vop2_data {
u8 nr_vps;
u64 feature;
+ u32 version;
const struct vop2_ops *ops;
const struct vop2_win_data *win;
const struct vop2_video_port_data *vp;
@@ -252,6 +262,7 @@ struct vop2_data {
};
struct vop2 {
+ u32 version;
struct device *dev;
struct drm_device *drm;
struct vop2_video_port vps[ROCKCHIP_MAX_CRTC];
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c
index 8473dc9c232c..efd704464fab 100644
--- a/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c
+++ b/drivers/gpu/drm/rockchip/rockchip_vop2_reg.c
@@ -1593,6 +1593,7 @@ static const struct vop2_ops rk3588_vop_ops = {
};
static const struct vop2_data rk3566_vop = {
+ .version = VOP_VERSION_RK3568,
.feature = VOP2_FEATURE_HAS_SYS_GRF,
.nr_vps = 3,
.max_input = { 4096, 2304 },
@@ -1611,6 +1612,7 @@ static const struct vop2_data rk3566_vop = {
};
static const struct vop2_data rk3568_vop = {
+ .version = VOP_VERSION_RK3568,
.feature = VOP2_FEATURE_HAS_SYS_GRF,
.nr_vps = 3,
.max_input = { 4096, 2304 },
@@ -1629,6 +1631,7 @@ static const struct vop2_data rk3568_vop = {
};
static const struct vop2_data rk3588_vop = {
+ .version = VOP_VERSION_RK3588,
.feature = VOP2_FEATURE_HAS_SYS_GRF | VOP2_FEATURE_HAS_VO1_GRF |
VOP2_FEATURE_HAS_VOP_GRF | VOP2_FEATURE_HAS_SYS_PMU,
.nr_vps = 4,
--
2.34.1
next prev parent reply other threads:[~2024-09-20 8:22 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-20 8:16 [PATCH v3 00/15] VOP Support for rk3576 Andy Yan
2024-09-20 8:20 ` [PATCH v3 01/15] drm/rockchip: vop2: Add debugfs support Andy Yan
2024-09-20 8:20 ` [PATCH v3 02/15] drm/rockchip: Set dma mask to 64 bit Andy Yan
2024-10-16 17:38 ` Robin Murphy
2024-10-17 7:06 ` Andy Yan
2024-10-17 8:58 ` Jonas Karlman
2024-09-20 8:20 ` [PATCH v3 03/15] drm/rockchip: vop2: Fix cluster windows alpha ctrl regsiters offset Andy Yan
2024-09-20 8:20 ` [PATCH v3 04/15] drm/rockchip: vop2: Fix the mixer alpha setup for layer 0 Andy Yan
2024-09-20 8:21 ` [PATCH v3 05/15] drm/rockchip: vop2: Fix the windows switch between different layers Andy Yan
2024-09-20 8:21 ` [PATCH v3 06/15] drm/rockchip: vop2: include rockchip_drm_drv.h Andy Yan
2024-09-22 10:20 ` Min-Hua Chen
2024-09-22 10:33 ` Diederik de Haas
2024-09-22 10:50 ` Min-Hua Chen
2024-09-20 8:21 ` [PATCH v3 07/15] drm/rockchip: vop2: Support 32x8 superblock afbc Andy Yan
2024-09-20 8:21 ` [PATCH v3 08/15] drm/rockchip: vop2: Add platform specific callback Andy Yan
2024-09-20 8:21 ` [PATCH v3 09/15] drm/rockchip: vop2: Support for different layer selet configuration between VPs Andy Yan
2024-09-20 8:22 ` Andy Yan [this message]
2024-09-20 8:22 ` [PATCH v3 11/15] drm/rockchip: vop2: Register the primary plane and overlay plane separately Andy Yan
2024-09-20 8:22 ` [PATCH v3 12/15] drm/rockchip: vop2: Set plane possible crtcs by possible vp mask Andy Yan
2024-09-20 8:22 ` [PATCH v3 13/15] drm/rockchip: vop2: Add uv swap for cluster window Andy Yan
2024-09-20 8:23 ` [PATCH v3 14/15] dt-bindings: display: vop2: Add rk3576 support Andy Yan
2024-09-22 21:05 ` Krzysztof Kozlowski
2024-09-20 8:23 ` [PATCH v3 15/15] drm/rockchip: vop2: Add support for rk3576 Andy Yan
2024-09-24 9:34 ` [PATCH v3 00/15] VOP Support " Michael Riesch
2024-09-25 9:54 ` Andy Yan
2024-09-30 19:32 ` Detlev Casanova
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=20240920082207.6863-1-andyshrk@163.com \
--to=andyshrk@163.com \
--cc=andy.yan@rock-chips.com \
--cc=conor+dt@kernel.org \
--cc=derek.foreman@collabora.com \
--cc=detlev.casanova@collabora.com \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=heiko@sntech.de \
--cc=hjc@rock-chips.com \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=minhuadotchen@gmail.com \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®