From 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 13 May 2024 10:30:14 +0000
Subject: [PATCH] modify sin led gpio
---
kernel/drivers/video/rockchip/mpp/mpp_service.c | 141 +++++++++++++++++++++++++++++++++-------------
1 files changed, 100 insertions(+), 41 deletions(-)
diff --git a/kernel/drivers/video/rockchip/mpp/mpp_service.c b/kernel/drivers/video/rockchip/mpp/mpp_service.c
index 67ef213..c04d6fb 100644
--- a/kernel/drivers/video/rockchip/mpp/mpp_service.c
+++ b/kernel/drivers/video/rockchip/mpp/mpp_service.c
@@ -19,7 +19,6 @@
#include <linux/slab.h>
#include <linux/nospec.h>
#include <linux/mfd/syscon.h>
-#include <linux/regmap.h>
#include "mpp_debug.h"
#include "mpp_common.h"
@@ -28,8 +27,22 @@
#define MPP_CLASS_NAME "mpp_class"
#define MPP_SERVICE_NAME "mpp_service"
-#define MPP_REGISTER_DRIVER(srv, X, x) {\
- if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_##X))\
+#define HAS_RKVDEC IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVDEC)
+#define HAS_RKVENC IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVENC)
+#define HAS_VDPU1 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPU1)
+#define HAS_VEPU1 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU1)
+#define HAS_VDPU2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPU2)
+#define HAS_VEPU2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU2)
+#define HAS_VEPU22 IS_ENABLED(CONFIG_ROCKCHIP_MPP_VEPU22)
+#define HAS_IEP2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_IEP2)
+#define HAS_JPGDEC IS_ENABLED(CONFIG_ROCKCHIP_MPP_JPGDEC)
+#define HAS_RKVDEC2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVDEC2)
+#define HAS_RKVENC2 IS_ENABLED(CONFIG_ROCKCHIP_MPP_RKVENC2)
+#define HAS_AV1DEC IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC)
+#define HAS_VDPP IS_ENABLED(CONFIG_ROCKCHIP_MPP_VDPP)
+
+#define MPP_REGISTER_DRIVER(srv, flag, X, x) {\
+ if (flag)\
mpp_add_driver(srv, MPP_DRIVER_##X, &rockchip_##x##_driver, "grf_"#x);\
}
@@ -43,47 +56,34 @@
struct mpp_grf_info *grf_info,
const char *grf_name)
{
+ int ret;
int index;
u32 grf_offset = 0;
u32 grf_value = 0;
- u32 mem_offset = 0;
- u32 val_mem_on = 0;
- u32 val_mem_off = 0;
struct regmap *grf;
grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
if (IS_ERR_OR_NULL(grf))
return -EINVAL;
+ ret = of_property_read_u32(np, "rockchip,grf-offset", &grf_offset);
+ if (ret)
+ return -ENODATA;
+
index = of_property_match_string(np, "rockchip,grf-names", grf_name);
if (index < 0)
return -ENODATA;
- of_property_read_u32(np, "rockchip,grf-offset", &grf_offset);
- of_property_read_u32_index(np, "rockchip,grf-values",
- index, &grf_value);
- of_property_read_u32_index(np, "rockchip,grf-mem-offset",
- index, &mem_offset);
- of_property_read_u32_index(np, "rockchip,grf-mem-on-values",
- index, &val_mem_on);
- of_property_read_u32_index(np, "rockchip,grf-mem-off-values",
- index, &val_mem_off);
-
+ ret = of_property_read_u32_index(np, "rockchip,grf-values",
+ index, &grf_value);
+ if (ret)
+ return -ENODATA;
grf_info->grf = grf;
grf_info->offset = grf_offset;
grf_info->val = grf_value;
- grf_info->mem_offset = mem_offset;
- grf_info->val_mem_on = val_mem_on;
- grf_info->val_mem_off = val_mem_off;
-
- if (grf_info->offset && grf_info->val)
- mpp_set_grf(grf_info);
-
- if (grf_info->mem_offset && grf_info->val_mem_off)
- regmap_write(grf_info->grf, grf_info->mem_offset,
- grf_info->val_mem_off);
+ mpp_set_grf(grf_info);
return 0;
}
@@ -99,7 +99,10 @@
&srv->grf_infos[type],
grf_name);
- ret = platform_driver_register(driver);
+ if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC) && type == MPP_DRIVER_AV1DEC)
+ ret = av1dec_driver_register(driver);
+ else
+ ret = platform_driver_register(driver);
if (ret)
return ret;
@@ -111,8 +114,12 @@
static int mpp_remove_driver(struct mpp_service *srv, int i)
{
if (srv && srv->sub_drivers[i]) {
- mpp_set_grf(&srv->grf_infos[i]);
- platform_driver_unregister(srv->sub_drivers[i]);
+ if (i != MPP_DRIVER_AV1DEC) {
+ mpp_set_grf(&srv->grf_infos[i]);
+ platform_driver_unregister(srv->sub_drivers[i]);
+ } else if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_AV1DEC)) {
+ av1dec_driver_unregister(srv->sub_drivers[i]);
+ }
srv->sub_drivers[i] = NULL;
}
@@ -176,6 +183,55 @@
return 0;
}
+static int mpp_dump_session(struct mpp_session *session, struct seq_file *s)
+{
+ struct mpp_dma_session *dma = session->dma;
+ struct mpp_dma_buffer *n;
+ struct mpp_dma_buffer *buffer;
+ phys_addr_t end;
+ unsigned long z = 0, t = 0;
+ int i = 0;
+#define K(size) ((unsigned long)((size) >> 10))
+
+ if (!dma)
+ return 0;
+
+ seq_puts(s, "session iova range dump:\n");
+
+ mutex_lock(&dma->list_mutex);
+ list_for_each_entry_safe(buffer, n, &dma->used_list, link) {
+ end = buffer->iova + buffer->size - 1;
+ z = (unsigned long)buffer->size;
+ t += z;
+
+ seq_printf(s, "%4d: ", i++);
+ seq_printf(s, "%pa..%pa (%10lu %s)\n", &buffer->iova, &end,
+ (z >= 1024) ? (K(z)) : z,
+ (z >= 1024) ? "KiB" : "Bytes");
+ }
+ i = 0;
+ list_for_each_entry_safe(buffer, n, &dma->unused_list, link) {
+ if (!buffer->dmabuf)
+ continue;
+
+ end = buffer->iova + buffer->size - 1;
+ z = (unsigned long)buffer->size;
+ t += z;
+
+ seq_printf(s, "%4d: ", i++);
+ seq_printf(s, "%pa..%pa (%10lu %s)\n", &buffer->iova, &end,
+ (z >= 1024) ? (K(z)) : z,
+ (z >= 1024) ? "KiB" : "Bytes");
+ }
+
+ mutex_unlock(&dma->list_mutex);
+ seq_printf(s, "session: pid=%d index=%d\n", session->pid, session->index);
+ seq_printf(s, " device: %s\n", dev_name(session->mpp->dev));
+ seq_printf(s, " memory: %lu MiB\n", K(K(t)));
+
+ return 0;
+}
+
static int mpp_show_session_summary(struct seq_file *seq, void *offset)
{
struct mpp_session *session = NULL, *n;
@@ -193,6 +249,8 @@
if (!session->mpp)
continue;
mpp = session->mpp;
+
+ mpp_dump_session(session, seq);
if (mpp->dev_ops->dump_session)
mpp->dev_ops->dump_session(session, seq);
@@ -364,18 +422,19 @@
mpp_procfs_init(srv);
/* register sub drivers */
- MPP_REGISTER_DRIVER(srv, RKVDEC, rkvdec);
- MPP_REGISTER_DRIVER(srv, RKVENC, rkvenc);
- MPP_REGISTER_DRIVER(srv, VDPU1, vdpu1);
- MPP_REGISTER_DRIVER(srv, VEPU1, vepu1);
- MPP_REGISTER_DRIVER(srv, VDPU2, vdpu2);
- MPP_REGISTER_DRIVER(srv, VEPU2, vepu2);
- MPP_REGISTER_DRIVER(srv, VEPU22, vepu22);
- MPP_REGISTER_DRIVER(srv, IEP2, iep2);
- MPP_REGISTER_DRIVER(srv, JPGDEC, jpgdec);
- MPP_REGISTER_DRIVER(srv, RKVDEC2, rkvdec2);
- MPP_REGISTER_DRIVER(srv, VDPP, vdpp);
- MPP_REGISTER_DRIVER(srv, RKVENC2, rkvenc2);
+ MPP_REGISTER_DRIVER(srv, HAS_RKVDEC, RKVDEC, rkvdec);
+ MPP_REGISTER_DRIVER(srv, HAS_RKVENC, RKVENC, rkvenc);
+ MPP_REGISTER_DRIVER(srv, HAS_VDPU1, VDPU1, vdpu1);
+ MPP_REGISTER_DRIVER(srv, HAS_VEPU1, VEPU1, vepu1);
+ MPP_REGISTER_DRIVER(srv, HAS_VDPU2, VDPU2, vdpu2);
+ MPP_REGISTER_DRIVER(srv, HAS_VEPU2, VEPU2, vepu2);
+ MPP_REGISTER_DRIVER(srv, HAS_VEPU22, VEPU22, vepu22);
+ MPP_REGISTER_DRIVER(srv, HAS_IEP2, IEP2, iep2);
+ MPP_REGISTER_DRIVER(srv, HAS_JPGDEC, JPGDEC, jpgdec);
+ MPP_REGISTER_DRIVER(srv, HAS_RKVDEC2, RKVDEC2, rkvdec2);
+ MPP_REGISTER_DRIVER(srv, HAS_RKVENC2, RKVENC2, rkvenc2);
+ MPP_REGISTER_DRIVER(srv, HAS_AV1DEC, AV1DEC, av1dec);
+ MPP_REGISTER_DRIVER(srv, HAS_VDPP, VDPP, vdpp);
dev_info(dev, "probe success\n");
--
Gitblit v1.6.2