From 4491f53eac9f51101aa6c18bb5914c4efce15f70 Mon Sep 17 00:00:00 2001 From: Yuefu Su Date: Wed, 18 Jun 2025 17:06:29 +0800 Subject: [PATCH 01/11] arm64: dts: rockchip: rv1126b-thunder-boot: Enlarge meta memory size to 0xe0000 Signed-off-by: Yuefu Su Change-Id: Ib0d2af98ab3bfbda9f853b53dd2dbc297ba9437e --- arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi b/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi index dc1defc3ab39..1d47f783055e 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi +++ b/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi @@ -93,7 +93,7 @@ meta: meta@41240000 { /* reg's offset MUST match with RTOS */ - reg = <0x41240000 0x000c0000>; + reg = <0x41240000 0x000e0000>; }; rkisp_thunderboot: rkisp@41300000 { @@ -102,7 +102,7 @@ * vicap, capture raw10, ceil(w*10/8/256)*256*h *4(buf num) * e.g. 1920x1080: 0xa8c000 */ - reg = <0x41300000 0xa8c000>; + reg = <0x41320000 0xa8c000>; }; rkisp1_thunderboot: rkisp1_thunderboot { From 9ea14b98a6cafd8805128388effa093b491beb22 Mon Sep 17 00:00:00 2001 From: Yuefu Su Date: Wed, 18 Jun 2025 17:11:18 +0800 Subject: [PATCH 02/11] arm64: dts: rockchip: rv1126b-evb2-v10-tb-400w: Adjust rkisp_thunderboot address to 0x41320000 Signed-off-by: Yuefu Su Change-Id: Ia5ac0ca90046a43fe0efa42aad6c957e1106ab86 --- arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts b/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts index 08b6a95d551d..c1ba05974b77 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts +++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts @@ -63,5 +63,5 @@ * vicap, capture raw10, ceil(w*10/8/256)*256*h *4(buf num) * e.g. 2688x1520: 0x14c8000 */ - reg = <0x41300000 0x14c8000>; + reg = <0x41320000 0x14c8000>; }; From 2b322acaa76be3cb38650e9b7a3293cf3c50cc0a Mon Sep 17 00:00:00 2001 From: Yuefu Su Date: Wed, 18 Jun 2025 15:27:09 +0800 Subject: [PATCH 03/11] arm64: dts: rockchip: rv1126b-evb2-v10-tb-400w: Add rndis support Signed-off-by: Yuefu Su Change-Id: I40cea32b83f01a407a426cce3fcef1b0ee643089 --- .../dts/rockchip/rv1126b-evb2-v10-tb-400w.dts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts b/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts index c1ba05974b77..ca8d8a5e66a1 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts +++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb2-v10-tb-400w.dts @@ -65,3 +65,19 @@ */ reg = <0x41320000 0x14c8000>; }; + +&usb2phy { + status = "okay"; +}; + +&usb2phy_otg { + status = "okay"; +}; + +&usb3phy { + status = "okay"; +}; + +&usb_drd_dwc3 { + status = "okay"; +}; From a3f4c0fba48680aa8b792fee08986b331cb7bcb3 Mon Sep 17 00:00:00 2001 From: Yuefu Su Date: Thu, 19 Jun 2025 10:57:47 +0800 Subject: [PATCH 04/11] ARM: dts: rockchip: rv1126b-evb2-v10-tb-400w: Enlarge ramdisk size for some algorithm files Signed-off-by: Yuefu Su Change-Id: Ic7e96e688dd7c357ed82b4760a4a43d7ab8fe49f --- arch/arm/boot/dts/rv1126b-evb2-v10-tb-400w.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/boot/dts/rv1126b-evb2-v10-tb-400w.dts b/arch/arm/boot/dts/rv1126b-evb2-v10-tb-400w.dts index dffdade9333c..5d1bfda82ece 100644 --- a/arch/arm/boot/dts/rv1126b-evb2-v10-tb-400w.dts +++ b/arch/arm/boot/dts/rv1126b-evb2-v10-tb-400w.dts @@ -11,9 +11,9 @@ }; &ramdisk_r { - reg = <0x48c40000 (20 * 0x00100000)>; + reg = <0x48c40000 (30 * 0x00100000)>; }; &ramdisk_c { - reg = <0x4a040000 (10 * 0x00100000)>; + reg = <0x4aa40000 (20 * 0x00100000)>; }; From ba953750af308bfa32597822f50cdf9810d58f40 Mon Sep 17 00:00:00 2001 From: XiaoDong Huang Date: Thu, 19 Jun 2025 10:52:37 +0800 Subject: [PATCH 05/11] arm64: dts: rockchip: rv1126b-evb3/4-v10: enable sleep-debug Signed-off-by: XiaoDong Huang Change-Id: If5e5517bf76b3bce21b3ef20aaddb7b8fd2e2d96 --- arch/arm64/boot/dts/rockchip/rv1126b-evb3-v10.dts | 2 ++ arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb3-v10.dts b/arch/arm64/boot/dts/rockchip/rv1126b-evb3-v10.dts index 4e0d11055849..ddbbf9406da5 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-evb3-v10.dts +++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb3-v10.dts @@ -451,6 +451,8 @@ &rockchip_suspend { status = "okay"; + rockchip,sleep-debug-en = <1>; + rockchip,sleep-pin-config = < (0 ) diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts b/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts index ec5bf094fa46..5088c15904cf 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts +++ b/arch/arm64/boot/dts/rockchip/rv1126b-evb4-v10.dts @@ -443,6 +443,8 @@ &rockchip_suspend { status = "okay"; + rockchip,sleep-debug-en = <1>; + rockchip,sleep-mode-config = < (0 | RKPM_SLP_ARMOFF_LOGOFF From d91c7665f9214a46a5e3984284bfb9233db85d27 Mon Sep 17 00:00:00 2001 From: Zitong Cai Date: Mon, 5 May 2025 17:07:17 +0800 Subject: [PATCH 06/11] mfd: display-serdes: Add serdes debug node Change-Id: Ieeb8590e184cfa45d32ff72a69b0c2ac8e43a3bc Signed-off-by: Zitong Cai --- drivers/mfd/display-serdes/core.h | 67 +++++---- drivers/mfd/display-serdes/serdes-core.c | 171 +++++++++++++++++++++++ drivers/mfd/display-serdes/serdes-i2c.c | 20 ++- 3 files changed, 229 insertions(+), 29 deletions(-) diff --git a/drivers/mfd/display-serdes/core.h b/drivers/mfd/display-serdes/core.h index e9b1169ac7dd..f51c7d8e609e 100644 --- a/drivers/mfd/display-serdes/core.h +++ b/drivers/mfd/display-serdes/core.h @@ -78,36 +78,42 @@ #include "../../../../drivers/extcon/extcon.h" #include "../../../../drivers/base/regmap/internal.h" -/* -* if enable all the debug information, -* there will be much log. -* -* so suggest set CONFIG_LOG_BUF_SHIFT to 18 -*/ -//#define SERDES_DEBUG_MFD -//#define SERDES_DEBUG_I2C -//#define SERDES_DEBUG_CHIP +/** + * Enabling verbose debug messages is done through the serdes_log_level parameter, each + * category being enabled by a bit: + * + * - serdes_log_level=0x1 will enable MFD messages + * - serdes_log_level=0x2 will enable I2C messages + * - serdes_log_level=0x4 will enable CHIP messages + * - serdes_log_level=0x7 will enable all messages + * + * An interesting feature is that it's possible to enable verbose logging at + * run-time by echoing the debug value in its sysfs node:: + * + * # echo 0x7 > /sys/kernel/debug/log_level + **/ -#ifdef SERDES_DEBUG_MFD -#define SERDES_DBG_MFD(x...) pr_info(x) -#else -#define SERDES_DBG_MFD(x...) no_printk(x) -#endif +enum serdes_log_category { + SERDES_MFD, + SERDES_I2C, + SERDES_CHIP, +}; -#ifdef SERDES_DEBUG_I2C -#define SERDES_DBG_I2C(x...) pr_info(x) -#else -#define SERDES_DBG_I2C(x...) no_printk(x) -#endif +#define SERDES_DBG_MFD(fmt, ...) serdes_dev_dbg(SERDES_MFD, fmt, ##__VA_ARGS__) +#define SERDES_DBG_I2C(fmt, ...) serdes_dev_dbg(SERDES_I2C, fmt, ##__VA_ARGS__) +#define SERDES_DBG_CHIP(fmt, ...) serdes_dev_dbg(SERDES_CHIP, fmt, ##__VA_ARGS__) -#ifdef SERDES_DEBUG_CHIP -#define SERDES_DBG_CHIP(x...) pr_info(x) -#else -#define SERDES_DBG_CHIP(x...) no_printk(x) -#endif +enum serdes_debug_mode { + SERDES_OPEN_I2C_WRITE, + SERDES_CLOSE_I2C_WRITE, + SERDES_SET_SEQUENCE, + SERDES_SET_PINCTRL_SLEEP, + SERDES_SET_PINCTRL_DEFAULT, +}; #define MFD_SERDES_DISPLAY_VERSION "serdes-mfd-displaly-v11-241025" #define MAX_NUM_SERDES_SPLIT 8 + struct serdes; enum ser_link_mode { SER_DUAL_LINK, @@ -387,8 +393,12 @@ struct serdes { struct workqueue_struct *mfd_wq; struct delayed_work mfd_delay_work; + bool route_enable; bool use_delay_work; + char dir_name[25]; + struct dentry *debugfs_dentry; + enum serdes_debug_mode debug; struct kthread_worker *kworker; struct kthread_delayed_work reg_check_work; @@ -420,8 +430,6 @@ struct serdes { /* Device I/O API */ int serdes_reg_read(struct serdes *serdes, unsigned int reg, unsigned int *val); int serdes_reg_write(struct serdes *serdes, unsigned int reg, unsigned int val); -void serdes_reg_lock(struct serdes *serdes); -int serdes_reg_unlock(struct serdes *serdes); int serdes_set_bits(struct serdes *serdes, unsigned int reg, unsigned int mask, unsigned int val); int serdes_bulk_read(struct serdes *serdes, unsigned int reg, @@ -441,7 +449,12 @@ void serdes_device_poweroff(struct serdes *serdes); int serdes_device_shutdown(struct serdes *serdes); int serdes_irq_init(struct serdes *serdes); void serdes_irq_exit(struct serdes *serdes); -void serdes_auxadc_init(struct serdes *serdes); + +void serdes_dev_dbg(enum serdes_log_category category, const char *format, ...); +void serdes_debugfs_init(void); +void serdes_debugfs_exit(void); +void serdes_create_debugfs(struct serdes *serdes); +void serdes_destroy_debugfs(struct serdes *serdes); extern struct serdes_chip_data serdes_bu18tl82_data; extern struct serdes_chip_data serdes_bu18rl82_data; diff --git a/drivers/mfd/display-serdes/serdes-core.c b/drivers/mfd/display-serdes/serdes-core.c index 6a8f7e1c18a4..da45502f254f 100644 --- a/drivers/mfd/display-serdes/serdes-core.c +++ b/drivers/mfd/display-serdes/serdes-core.c @@ -9,6 +9,9 @@ #include "core.h" +static unsigned long serdes_log_level; +static struct dentry *serdes_debugfs_root; + static const struct mfd_cell serdes_bu18tl82_devs[] = { { .name = "serdes-pinctrl", @@ -175,6 +178,9 @@ int serdes_bulk_write(struct serdes *serdes, unsigned int reg, u16 *buf = src; int i, ret; + if (serdes->debug == SERDES_CLOSE_I2C_WRITE) + return 0; + WARN_ON(count <= 0); mutex_lock(&serdes->io_lock); @@ -205,6 +211,9 @@ int serdes_multi_reg_write(struct serdes *serdes, const struct reg_sequence *reg { int i, ret; + if (serdes->debug == SERDES_CLOSE_I2C_WRITE) + return 0; + SERDES_DBG_I2C("%s %s %s num=%d\n", __func__, dev_name(serdes->dev), serdes->chip_data->name, num_regs); ret = regmap_multi_reg_write(serdes->regmap, regs, num_regs); @@ -229,6 +238,9 @@ int serdes_reg_write(struct serdes *serdes, unsigned int reg, { int ret; + if (serdes->debug == SERDES_CLOSE_I2C_WRITE) + return 0; + ret = regmap_write(serdes->regmap, reg, val); SERDES_DBG_I2C("%s %s %s Write Reg%04x %04x ret=%d\n", __func__, dev_name(serdes->dev), serdes->chip_data->name, reg, val, ret); @@ -252,6 +264,9 @@ int serdes_set_bits(struct serdes *serdes, unsigned int reg, { int ret; + if (serdes->debug == SERDES_CLOSE_I2C_WRITE) + return 0; + SERDES_DBG_I2C("%s %s %s Write Reg%04x %04x) mask=%04x\n", __func__, dev_name(serdes->dev), serdes->chip_data->name, reg, val, mask); ret = regmap_update_bits(serdes->regmap, reg, mask, val); @@ -390,6 +405,162 @@ int serdes_device_init(struct serdes *serdes) } EXPORT_SYMBOL_GPL(serdes_device_init); +static int log_level_show(struct seq_file *m, void *data) +{ + seq_printf(m, "%lu\n", serdes_log_level); + + return 0; +} + +static int log_level_open(struct inode *inode, struct file *file) +{ + return single_open(file, log_level_show, NULL); +} + +static ssize_t log_level_write(struct file *file, const char __user *ubuf, + size_t len, loff_t *offp) +{ + char buf[12]; + unsigned long value; + + if (len > sizeof(buf) - 1) + return -EINVAL; + + if (copy_from_user(buf, ubuf, len)) + return -EFAULT; + + buf[len] = '\0'; + + if (kstrtoul(buf, 0, &value)) + return -EINVAL; + + serdes_log_level = value; + + return len; +} + +static int debug_show(struct seq_file *m, void *data) +{ + struct serdes *serdes = m->private; + + seq_printf(m, "%d\n", serdes->debug); + + return 0; +} + +static int debug_open(struct inode *inode, struct file *file) +{ + struct serdes *serdes = inode->i_private; + + return single_open(file, debug_show, serdes); +} + +static ssize_t debug_write(struct file *file, const char __user *ubuf, + size_t len, loff_t *offp) +{ + struct seq_file *m = file->private_data; + struct serdes *serdes = m->private; + char buf[12]; + + if (!serdes) + return -EINVAL; + + if (len > sizeof(buf) - 1) + return -EINVAL; + + if (copy_from_user(buf, ubuf, len)) + return -EFAULT; + + buf[len] = '\0'; + + if (sysfs_streq(buf, "on")) + serdes->debug = SERDES_OPEN_I2C_WRITE; + else if (sysfs_streq(buf, "off")) + serdes->debug = SERDES_CLOSE_I2C_WRITE; + else if (sysfs_streq(buf, "default")) { + serdes->debug = SERDES_SET_PINCTRL_DEFAULT; + serdes_set_pinctrl_default(serdes); + } else if (sysfs_streq(buf, "sleep")) { + serdes->debug = SERDES_SET_PINCTRL_SLEEP; + serdes_set_pinctrl_sleep(serdes); + } else if (sysfs_streq(buf, "seq")) { + serdes->debug = SERDES_SET_SEQUENCE; + serdes_i2c_set_sequence(serdes); + } else + return -EINVAL; + + return len; +} + +static const struct file_operations log_level_fops = { + .owner = THIS_MODULE, + .open = log_level_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, + .write = log_level_write +}; + +static const struct file_operations debug_fops = { + .owner = THIS_MODULE, + .open = debug_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, + .write = debug_write +}; + +void serdes_create_debugfs(struct serdes *serdes) +{ + + snprintf(serdes->dir_name, sizeof(serdes->dir_name), "%s-%s", + dev_name(serdes->dev), serdes->chip_data->name); + + serdes->debugfs_dentry = debugfs_create_dir(serdes->dir_name, serdes_debugfs_root); + debugfs_create_file("debug", 0664, serdes->debugfs_dentry, serdes, + &debug_fops); +} +EXPORT_SYMBOL(serdes_create_debugfs); + +void serdes_destroy_debugfs(struct serdes *serdes) +{ + debugfs_remove_recursive(serdes->debugfs_dentry); +} +EXPORT_SYMBOL(serdes_destroy_debugfs); + +void serdes_debugfs_init(void) +{ + serdes_debugfs_root = debugfs_create_dir("serdes", NULL); + + debugfs_create_file("log_level", 0664, serdes_debugfs_root, NULL, + &log_level_fops); +} +EXPORT_SYMBOL(serdes_debugfs_init); + +void serdes_debugfs_exit(void) +{ + debugfs_remove_recursive(serdes_debugfs_root); +} +EXPORT_SYMBOL(serdes_debugfs_exit); + +void serdes_dev_dbg(enum serdes_log_category category, const char *format, ...) +{ + struct va_format vaf; + va_list args; + + if (!unlikely(serdes_log_level & BIT(category))) + return; + + va_start(args, format); + vaf.fmt = format; + vaf.va = &args; + + pr_info("%pV", &vaf); + + va_end(args); +} +EXPORT_SYMBOL(serdes_dev_dbg); + int serdes_set_pinctrl_default(struct serdes *serdes) { int ret = 0; diff --git a/drivers/mfd/display-serdes/serdes-i2c.c b/drivers/mfd/display-serdes/serdes-i2c.c index 78b3097a50ea..feb2d8f3460c 100644 --- a/drivers/mfd/display-serdes/serdes-i2c.c +++ b/drivers/mfd/display-serdes/serdes-i2c.c @@ -446,6 +446,8 @@ static int serdes_i2c_probe(struct i2c_client *client, SERDES_DBG_MFD("%s: use_reg_check_work=%d\n", __func__, serdes->use_reg_check_work); } + serdes_create_debugfs(serdes); + dev_info(dev, "serdes %s serdes_i2c_probe successful version %s\n", serdes->chip_data->name, MFD_SERDES_DISPLAY_VERSION); @@ -472,6 +474,8 @@ static void serdes_i2c_remove(struct i2c_client *client) cancel_delayed_work_sync(&serdes->mfd_delay_work); destroy_workqueue(serdes->mfd_wq); } + + serdes_destroy_debugfs(serdes); } static int serdes_i2c_prepare(struct device *dev) @@ -584,12 +588,24 @@ static int __init serdes_i2c_init(void) int ret; ret = i2c_add_driver(&serdes_i2c_driver); - if (ret != 0) + if (ret != 0) { pr_err("Failed to register serdes I2C driver: %d\n", ret); + return ret; + } - return ret; + serdes_debugfs_init(); + + return 0; } + +static void __exit serdes_i2c_exit(void) +{ + i2c_del_driver(&serdes_i2c_driver); + serdes_debugfs_exit(); +} + subsys_initcall(serdes_i2c_init); +module_exit(serdes_i2c_exit); MODULE_AUTHOR("Luo Wei "); MODULE_DESCRIPTION("display i2c interface for different serdes"); From 1d7e45abc3d1c7ad585bab1efded9ac48de2c182 Mon Sep 17 00:00:00 2001 From: Weixin Zhou Date: Thu, 19 Jun 2025 11:09:50 +0800 Subject: [PATCH 07/11] MALI: bifrost: Fix kctx kobj UAF In a multi kctx scenario, the kobj is freed when one kctx is released, but the node remains. Accessing it leads to a use-after-free (invalid pointer) issue. Fixes: fe59c73bbf82 ("MALI: bifrost: Optimize gpu mem sysfs entry") Signed-off-by: Weixin Zhou Change-Id: I9d00b660c4ca4693606fbf4f70888cf6809a781d --- .../gpu/arm/bifrost/context/mali_kbase_context.c | 13 ++++++------- drivers/gpu/arm/bifrost/mali_kbase_defs.h | 3 ++- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/arm/bifrost/context/mali_kbase_context.c b/drivers/gpu/arm/bifrost/context/mali_kbase_context.c index b9a6c2485de8..8547a6863e48 100644 --- a/drivers/gpu/arm/bifrost/context/mali_kbase_context.c +++ b/drivers/gpu/arm/bifrost/context/mali_kbase_context.c @@ -84,15 +84,14 @@ static ssize_t kbase_kctx_attr_show(struct kobject *kobj, struct attribute *attr static ssize_t kbase_total_gpu_mem_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - struct kbase_context *kctx = container_of(kobj, struct kbase_context, kobj); + struct kbase_process *kprcs = container_of(kobj, struct kbase_process, kobj); - return scnprintf(buf, PAGE_SIZE, "%zu\n", kctx->kprcs->total_gpu_pages << PAGE_SHIFT); + return scnprintf(buf, PAGE_SIZE, "%zu\n", kprcs->total_gpu_pages << PAGE_SHIFT); } static ssize_t kbase_private_gpu_mem_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { - struct kbase_context *kctx = container_of(kobj, struct kbase_context, kobj); - struct kbase_process *kprcs = kctx->kprcs; + struct kbase_process *kprcs = container_of(kobj, struct kbase_process, kobj); struct kbase_context *tmp_kctx; size_t total_pages = 0; @@ -183,10 +182,10 @@ static int kbase_insert_kctx_to_process(struct kbase_context *kctx) if (unlikely(!scnprintf(kctx_name, 64, "%d", tgid))) return -ENOMEM; - ret = kobject_init_and_add(&kctx->kobj, &kbase_kctx_ktype, kctx->kbdev->kprcs_kobj, kctx_name); + ret = kobject_init_and_add(&kprcs->kobj, &kbase_kctx_ktype, kctx->kbdev->kprcs_kobj, kctx_name); if (ret) { dev_err(kctx->kbdev->dev, "Failed to create kctx kobject"); - kobject_put(&kctx->kobj); + kobject_put(&kprcs->kobj); } while (*new) { @@ -340,7 +339,7 @@ static void kbase_remove_kctx_from_process(struct kbase_context *kctx) * we can remove it from the process rb_tree. */ if (list_empty(&kprcs->kctx_list)) { - kobject_put(&kctx->kobj); + kobject_put(&kprcs->kobj); rb_erase(&kprcs->kprcs_node, &kctx->kbdev->process_root); /* Add checks, so that the terminating process Should not * hold any gpu_memory. diff --git a/drivers/gpu/arm/bifrost/mali_kbase_defs.h b/drivers/gpu/arm/bifrost/mali_kbase_defs.h index b7b19b802eae..a4c0dbc26567 100755 --- a/drivers/gpu/arm/bifrost/mali_kbase_defs.h +++ b/drivers/gpu/arm/bifrost/mali_kbase_defs.h @@ -688,6 +688,7 @@ struct kbase_devfreq_queue_info { /** * struct kbase_process - Representing an object of a kbase process instantiated * when the first kbase context is created under it. + * @kobj: Kernel object for sysfs representation of the process. * @tgid: Thread group ID. * @total_gpu_pages: Total gpu pages allocated across all the contexts * of this process, it accounts for both native allocations @@ -703,6 +704,7 @@ struct kbase_devfreq_queue_info { * imported multiple times for the process. */ struct kbase_process { + struct kobject kobj; pid_t tgid; size_t total_gpu_pages; struct list_head kctx_list; @@ -1902,7 +1904,6 @@ struct kbase_sub_alloc { * is made on the device file. */ struct kbase_context { - struct kobject kobj; struct file *filp; struct kbase_device *kbdev; struct list_head kctx_list_link; From 6717f122bd48ceff2e21f0852ebcfed8c13709fc Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Thu, 12 Jun 2025 15:35:48 +0800 Subject: [PATCH 08/11] video: rockchip: rga3: remove win0 FBC limit on RGA3 Change-Id: Iec2242bc928786969ffe4c82b4be49491f240678 Signed-off-by: Yu Qiaowei --- drivers/video/rockchip/rga3/rga3_reg_info.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index c0ce4a3ff4f1..0f45d4903702 100644 --- a/drivers/video/rockchip/rga3/rga3_reg_info.c +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c @@ -1569,9 +1569,6 @@ static void rga_cmd_to_rga3_cmd(struct rga_req *req_rga, struct rga3_req *req) addr_copy(&req->win0, &req_rga->dst); req->win0.format = req_rga->dst.format; - /* only win1 && wr support fbcd, win0 default raster */ - req->win0.rd_mode = 0; - /* set win0 dst size */ req->win0.dst_act_w = req_rga->dst.act_w; req->win0.dst_act_h = req_rga->dst.act_h; From ca76b3c8558cf47eeb0aa7d1a3082f39028350a7 Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Tue, 10 Jun 2025 17:36:46 +0800 Subject: [PATCH 09/11] video: rockchip: rga3: RGA3 support XRGB/XBGR8888/ARGB8888(AFBC)/ABGR8888(AFBC) Change-Id: I02f9f3ad159c63a30ec6d19deef7a37f88a841d8 Signed-off-by: Yu Qiaowei --- drivers/video/rockchip/rga3/rga3_reg_info.c | 4 +++ drivers/video/rockchip/rga3/rga_hw_config.c | 29 +++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index 0f45d4903702..dd72039049d0 100644 --- a/drivers/video/rockchip/rga3/rga3_reg_info.c +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c @@ -155,11 +155,13 @@ static void RGA3_set_reg_win0_info(u8 *base, struct rga3_req *msg) win_interleaved = 2; break; case RGA_FORMAT_ARGB_8888: + case RGA_FORMAT_XRGB_8888: win_format = 0x9; pixel_width = 4; win_interleaved = 2; break; case RGA_FORMAT_ABGR_8888: + case RGA_FORMAT_XBGR_8888: win_format = 0x7; pixel_width = 4; win_interleaved = 2; @@ -540,11 +542,13 @@ static void RGA3_set_reg_win1_info(u8 *base, struct rga3_req *msg) win_interleaved = 2; break; case RGA_FORMAT_ARGB_8888: + case RGA_FORMAT_XRGB_8888: win_format = 0x9; pixel_width = 4; win_interleaved = 2; break; case RGA_FORMAT_ABGR_8888: + case RGA_FORMAT_XBGR_8888: win_format = 0x7; pixel_width = 4; win_interleaved = 2; diff --git a/drivers/video/rockchip/rga3/rga_hw_config.c b/drivers/video/rockchip/rga3/rga_hw_config.c index d558c1513501..fadf251cfe0d 100644 --- a/drivers/video/rockchip/rga3/rga_hw_config.c +++ b/drivers/video/rockchip/rga3/rga_hw_config.c @@ -34,6 +34,8 @@ const uint32_t rga3_input_raster_format[] = { RGA_FORMAT_YCrCb_422_SP_10B, RGA_FORMAT_ARGB_8888, RGA_FORMAT_ABGR_8888, + RGA_FORMAT_XRGB_8888, + RGA_FORMAT_XBGR_8888, }; const uint32_t rga3_output_raster_format[] = { @@ -60,6 +62,29 @@ const uint32_t rga3_output_raster_format[] = { }; const uint32_t rga3_fbcd_format[] = { + RGA_FORMAT_RGBA_8888, + RGA_FORMAT_BGRA_8888, + RGA_FORMAT_RGBX_8888, + RGA_FORMAT_BGRX_8888, + RGA_FORMAT_ARGB_8888, + RGA_FORMAT_ABGR_8888, + RGA_FORMAT_XRGB_8888, + RGA_FORMAT_XBGR_8888, + RGA_FORMAT_RGB_888, + RGA_FORMAT_BGR_888, + RGA_FORMAT_RGB_565, + RGA_FORMAT_BGR_565, + RGA_FORMAT_YCbCr_422_SP, + RGA_FORMAT_YCbCr_420_SP, + RGA_FORMAT_YCrCb_422_SP, + RGA_FORMAT_YCrCb_420_SP, + RGA_FORMAT_YCbCr_420_SP_10B, + RGA_FORMAT_YCrCb_420_SP_10B, + RGA_FORMAT_YCbCr_422_SP_10B, + RGA_FORMAT_YCrCb_422_SP_10B, +}; + +const uint32_t rga3_fbce_format[] = { RGA_FORMAT_RGBA_8888, RGA_FORMAT_BGRA_8888, RGA_FORMAT_RGBX_8888, @@ -358,8 +383,8 @@ const struct rga_win_data rga3_win_data[] = { .name = "rga3-wr", .formats[RGA_RASTER_INDEX] = rga3_output_raster_format, .formats_count[RGA_RASTER_INDEX] = ARRAY_SIZE(rga3_output_raster_format), - .formats[RGA_AFBC16x16_INDEX] = rga3_fbcd_format, - .formats_count[RGA_AFBC16x16_INDEX] = ARRAY_SIZE(rga3_fbcd_format), + .formats[RGA_AFBC16x16_INDEX] = rga3_fbce_format, + .formats_count[RGA_AFBC16x16_INDEX] = ARRAY_SIZE(rga3_fbce_format), .formats[RGA_TILE8x8_INDEX] = rga3_tile_format, .formats_count[RGA_TILE8x8_INDEX] = ARRAY_SIZE(rga3_tile_format), .supported_rotations = 0, From 5a4197c84dc678338e4bf725efe116c89ccfa15c Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Fri, 13 Jun 2025 16:23:29 +0800 Subject: [PATCH 10/11] video: rockchip: rga3: fix RGA3 RB is inverse when output FBC RGBA8888 Change-Id: I4baaf4bca2332b792fdd8ab17cda9c85caee3bfc Signed-off-by: Yu Qiaowei --- drivers/video/rockchip/rga3/rga3_reg_info.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index dd72039049d0..d23ad4a8b971 100644 --- a/drivers/video/rockchip/rga3/rga3_reg_info.c +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c @@ -829,13 +829,24 @@ static void RGA3_set_reg_wr_info(u8 *base, struct rga3_req *msg) wr_format = 0x6; pixel_width = 4; wr_interleaved = 2; - wr_pix_swp = 1; + + /* fbc default RGBA8888, raster default BGRA8888 */ + if (msg->wr.rd_mode == 1) + wr_pix_swp = 0; + else + wr_pix_swp = 1; break; case RGA_FORMAT_BGRA_8888: case RGA_FORMAT_BGRX_8888: wr_format = 0x6; pixel_width = 4; wr_interleaved = 2; + + /* fbc default BGRA8888, raster default RGBA8888 */ + if (msg->wr.rd_mode == 1) + wr_pix_swp = 1; + else + wr_pix_swp = 0; break; case RGA_FORMAT_RGB_888: wr_format = 0x5; From a8d46129a9e02808f6f6e7c9496b67e238ef40a0 Mon Sep 17 00:00:00 2001 From: Yuefu Su Date: Thu, 19 Jun 2025 17:41:46 +0800 Subject: [PATCH 11/11] arm64: dts: rockchip: rv1126b-thunder-boot: fix rkisp_thunderboot base address error Fixes: 4491f53eac9f ("arm64: dts: rockchip: rv1126b-thunder-boot: Enlarge meta memory size to 0xe0000") Signed-off-by: Yuefu Su Change-Id: I0ea6b0480296c7e3f931e34388c5f49665e05ec6 --- arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi b/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi index 1d47f783055e..3c7d15df6207 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi +++ b/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi @@ -96,7 +96,7 @@ reg = <0x41240000 0x000e0000>; }; - rkisp_thunderboot: rkisp@41300000 { + rkisp_thunderboot: rkisp@41320000 { /* reg's offset MUST match with RTOS */ /* * vicap, capture raw10, ceil(w*10/8/256)*256*h *4(buf num)