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)>; }; 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..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 @@ -63,5 +63,21 @@ * vicap, capture raw10, ceil(w*10/8/256)*256*h *4(buf num) * e.g. 2688x1520: 0x14c8000 */ - reg = <0x41300000 0x14c8000>; + reg = <0x41320000 0x14c8000>; +}; + +&usb2phy { + status = "okay"; +}; + +&usb2phy_otg { + status = "okay"; +}; + +&usb3phy { + status = "okay"; +}; + +&usb_drd_dwc3 { + status = "okay"; }; 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 diff --git a/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi b/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi index dc1defc3ab39..3c7d15df6207 100644 --- a/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi +++ b/arch/arm64/boot/dts/rockchip/rv1126b-thunder-boot.dtsi @@ -93,16 +93,16 @@ meta: meta@41240000 { /* reg's offset MUST match with RTOS */ - reg = <0x41240000 0x000c0000>; + 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) * e.g. 1920x1080: 0xa8c000 */ - reg = <0x41300000 0xa8c000>; + reg = <0x41320000 0xa8c000>; }; rkisp1_thunderboot: rkisp1_thunderboot { 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; 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"); diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index c0ce4a3ff4f1..d23ad4a8b971 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; @@ -825,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; @@ -1569,9 +1584,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; 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,