From ef83daca54b089339d7e63fa8325f69ca02a153e Mon Sep 17 00:00:00 2001 From: Ziyuan Xu Date: Thu, 26 Oct 2023 16:58:24 +0800 Subject: [PATCH 1/9] soc: rockchip: tb_service: add memory-no-free property support Some product scenarios would like the rtos's memory space always been exclusive. Signed-off-by: Ziyuan Xu Change-Id: Ib71da6b355995ab5b12ddfdf346bbce8e1852745 --- drivers/soc/rockchip/rockchip_thunderboot_service.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/soc/rockchip/rockchip_thunderboot_service.c b/drivers/soc/rockchip/rockchip_thunderboot_service.c index d1420d141273..6002d64c8b05 100644 --- a/drivers/soc/rockchip/rockchip_thunderboot_service.c +++ b/drivers/soc/rockchip/rockchip_thunderboot_service.c @@ -24,6 +24,7 @@ struct rk_tb_serv { struct reset_control *rsts; phys_addr_t mem_start; size_t mem_size; + bool mem_no_free; }; static atomic_t mcu_done = ATOMIC_INIT(0); @@ -89,7 +90,8 @@ static void do_mcu_done(struct rk_tb_serv *serv) start = phys_to_virt(serv->mem_start); end = start + serv->mem_size; - free_reserved_area(start, end, -1, "rtos"); + if (!serv->mem_no_free) + free_reserved_area(start, end, -1, "rtos"); spin_lock(&lock); if (atomic_read(&mcu_done)) { @@ -150,6 +152,8 @@ static int rk_tb_serv_probe(struct platform_device *pdev) if (IS_ERR(serv->rsts) && PTR_ERR(serv->rsts) == -EPROBE_DEFER) return -EPROBE_DEFER; + serv->mem_no_free = device_property_read_bool(&pdev->dev, "memory-no-free"); + platform_set_drvdata(pdev, serv); mbox_cl = &serv->mbox_cl; From a1410c65b385a8de23338bb0b6b0cf3eb10435d0 Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Thu, 26 Oct 2023 11:33:01 +0800 Subject: [PATCH 2/9] video: rockchip: mpp: Add uapi header Change-Id: Id419e6a57adaf37371be8757b2435db0cffe7350 Signed-off-by: Herman Chen --- drivers/video/rockchip/mpp/mpp_common.c | 14 ----- drivers/video/rockchip/mpp/mpp_common.h | 56 +---------------- include/uapi/linux/rk-mpp.h | 82 +++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 69 deletions(-) create mode 100644 include/uapi/linux/rk-mpp.h diff --git a/drivers/video/rockchip/mpp/mpp_common.c b/drivers/video/rockchip/mpp/mpp_common.c index 0038df8308e6..d43ebf450ed2 100644 --- a/drivers/video/rockchip/mpp/mpp_common.c +++ b/drivers/video/rockchip/mpp/mpp_common.c @@ -36,12 +36,6 @@ #include "mpp_common.h" #include "mpp_iommu.h" -/* Use 'v' as magic number */ -#define MPP_IOC_MAGIC 'v' - -#define MPP_IOC_CFG_V1 _IOW(MPP_IOC_MAGIC, 1, unsigned int) -#define MPP_IOC_CFG_V2 _IOW(MPP_IOC_MAGIC, 2, unsigned int) - /* input parmater structure for version 1 */ struct mpp_msg_v1 { __u32 cmd; @@ -51,14 +45,6 @@ struct mpp_msg_v1 { __u64 data_ptr; }; -#define MPP_BAT_MSG_DONE (0x00000001) - -struct mpp_bat_msg { - __u64 flag; - __u32 fd; - __s32 ret; -}; - #ifdef CONFIG_ROCKCHIP_MPP_PROC_FS const char *mpp_device_name[MPP_DEVICE_BUTT] = { [MPP_DEVICE_VDPU1] = "VDPU1", diff --git a/drivers/video/rockchip/mpp/mpp_common.h b/drivers/video/rockchip/mpp/mpp_common.h index a088d62975f9..6d9beb7e6ca0 100644 --- a/drivers/video/rockchip/mpp/mpp_common.h +++ b/drivers/video/rockchip/mpp/mpp_common.h @@ -24,6 +24,7 @@ #include #include #include +#include #define MHZ (1000 * 1000) #define MPP_WORK_TIMEOUT_DELAY (500) @@ -31,13 +32,6 @@ #define MPP_MAX_MSG_NUM (16) #define MPP_MAX_REG_TRANS_NUM (60) #define MPP_MAX_TASK_CAPACITY (16) -/* define flags for mpp_request */ -#define MPP_FLAGS_MULTI_MSG (0x00000001) -#define MPP_FLAGS_LAST_MSG (0x00000002) -#define MPP_FLAGS_REG_FD_NO_TRANS (0x00000004) -#define MPP_FLAGS_SCL_FD_NO_TRANS (0x00000008) -#define MPP_FLAGS_REG_NO_OFFSET (0x00000010) -#define MPP_FLAGS_SECURE_MODE (0x00010000) /* grf mask for get value */ #define MPP_GRF_VAL_MASK (0xFFFF) @@ -93,45 +87,6 @@ enum MPP_DRIVER_TYPE { MPP_DRIVER_BUTT, }; -/** - * Command type: keep the same as user space - */ -enum MPP_DEV_COMMAND_TYPE { - MPP_CMD_QUERY_BASE = 0, - MPP_CMD_QUERY_HW_SUPPORT = MPP_CMD_QUERY_BASE + 0, - MPP_CMD_QUERY_HW_ID = MPP_CMD_QUERY_BASE + 1, - MPP_CMD_QUERY_CMD_SUPPORT = MPP_CMD_QUERY_BASE + 2, - MPP_CMD_QUERY_BUTT, - - MPP_CMD_INIT_BASE = 0x100, - MPP_CMD_INIT_CLIENT_TYPE = MPP_CMD_INIT_BASE + 0, - MPP_CMD_INIT_DRIVER_DATA = MPP_CMD_INIT_BASE + 1, - MPP_CMD_INIT_TRANS_TABLE = MPP_CMD_INIT_BASE + 2, - MPP_CMD_INIT_BUTT, - - MPP_CMD_SEND_BASE = 0x200, - MPP_CMD_SET_REG_WRITE = MPP_CMD_SEND_BASE + 0, - MPP_CMD_SET_REG_READ = MPP_CMD_SEND_BASE + 1, - MPP_CMD_SET_REG_ADDR_OFFSET = MPP_CMD_SEND_BASE + 2, - MPP_CMD_SET_RCB_INFO = MPP_CMD_SEND_BASE + 3, - MPP_CMD_SET_SESSION_FD = MPP_CMD_SEND_BASE + 4, - MPP_CMD_SEND_BUTT, - - MPP_CMD_POLL_BASE = 0x300, - MPP_CMD_POLL_HW_FINISH = MPP_CMD_POLL_BASE + 0, - MPP_CMD_POLL_HW_IRQ = MPP_CMD_POLL_BASE + 1, - MPP_CMD_POLL_BUTT, - - MPP_CMD_CONTROL_BASE = 0x400, - MPP_CMD_RESET_SESSION = MPP_CMD_CONTROL_BASE + 0, - MPP_CMD_TRANS_FD_TO_IOVA = MPP_CMD_CONTROL_BASE + 1, - MPP_CMD_RELEASE_FD = MPP_CMD_CONTROL_BASE + 2, - MPP_CMD_SEND_CODEC_INFO = MPP_CMD_CONTROL_BASE + 3, - MPP_CMD_CONTROL_BUTT, - - MPP_CMD_BUTT, -}; - enum MPP_CLOCK_MODE { CLK_MODE_BASE = 0, CLK_MODE_DEFAULT = CLK_MODE_BASE, @@ -195,15 +150,6 @@ struct mpp_dma_session; struct mpp_taskqueue; struct iommu_domain; -/* data common struct for parse out */ -struct mpp_request { - __u32 cmd; - __u32 flags; - __u32 size; - __u32 offset; - void __user *data; -}; - /* struct use to collect task set and poll message */ struct mpp_task_msgs { /* for ioctl msgs bat process */ diff --git a/include/uapi/linux/rk-mpp.h b/include/uapi/linux/rk-mpp.h new file mode 100644 index 000000000000..9a24407001ec --- /dev/null +++ b/include/uapi/linux/rk-mpp.h @@ -0,0 +1,82 @@ +/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */ +/* + * Rockchip mpp driver + * Copyright (C) 2023 Rockchip Electronics Co., Ltd. + */ + +#ifndef _UAPI_RK_MPP_H +#define _UAPI_RK_MPP_H + +#include + +/* Use 'v' as magic number */ +#define MPP_IOC_MAGIC 'v' + +#define MPP_IOC_CFG_V1 _IOW(MPP_IOC_MAGIC, 1, unsigned int) +#define MPP_IOC_CFG_V2 _IOW(MPP_IOC_MAGIC, 2, unsigned int) + +/** + * Command type: keep the same as user space + */ +enum MPP_DEV_COMMAND_TYPE { + MPP_CMD_QUERY_BASE = 0, + MPP_CMD_QUERY_HW_SUPPORT = MPP_CMD_QUERY_BASE + 0, + MPP_CMD_QUERY_HW_ID = MPP_CMD_QUERY_BASE + 1, + MPP_CMD_QUERY_CMD_SUPPORT = MPP_CMD_QUERY_BASE + 2, + MPP_CMD_QUERY_BUTT, + + MPP_CMD_INIT_BASE = 0x100, + MPP_CMD_INIT_CLIENT_TYPE = MPP_CMD_INIT_BASE + 0, + MPP_CMD_INIT_DRIVER_DATA = MPP_CMD_INIT_BASE + 1, + MPP_CMD_INIT_TRANS_TABLE = MPP_CMD_INIT_BASE + 2, + MPP_CMD_INIT_BUTT, + + MPP_CMD_SEND_BASE = 0x200, + MPP_CMD_SET_REG_WRITE = MPP_CMD_SEND_BASE + 0, + MPP_CMD_SET_REG_READ = MPP_CMD_SEND_BASE + 1, + MPP_CMD_SET_REG_ADDR_OFFSET = MPP_CMD_SEND_BASE + 2, + MPP_CMD_SET_RCB_INFO = MPP_CMD_SEND_BASE + 3, + MPP_CMD_SET_SESSION_FD = MPP_CMD_SEND_BASE + 4, + MPP_CMD_SEND_BUTT, + + MPP_CMD_POLL_BASE = 0x300, + MPP_CMD_POLL_HW_FINISH = MPP_CMD_POLL_BASE + 0, + MPP_CMD_POLL_HW_IRQ = MPP_CMD_POLL_BASE + 1, + MPP_CMD_POLL_BUTT, + + MPP_CMD_CONTROL_BASE = 0x400, + MPP_CMD_RESET_SESSION = MPP_CMD_CONTROL_BASE + 0, + MPP_CMD_TRANS_FD_TO_IOVA = MPP_CMD_CONTROL_BASE + 1, + MPP_CMD_RELEASE_FD = MPP_CMD_CONTROL_BASE + 2, + MPP_CMD_SEND_CODEC_INFO = MPP_CMD_CONTROL_BASE + 3, + MPP_CMD_CONTROL_BUTT, + + MPP_CMD_BUTT, +}; + +/* define flags for mpp_request */ +#define MPP_FLAGS_MULTI_MSG (0x00000001) +#define MPP_FLAGS_LAST_MSG (0x00000002) +#define MPP_FLAGS_REG_FD_NO_TRANS (0x00000004) +#define MPP_FLAGS_SCL_FD_NO_TRANS (0x00000008) +#define MPP_FLAGS_REG_NO_OFFSET (0x00000010) +#define MPP_FLAGS_SECURE_MODE (0x00010000) + +/* data common struct for parse out */ +struct mpp_request { + __u32 cmd; + __u32 flags; + __u32 size; + __u32 offset; + void __user *data; +}; + +#define MPP_BAT_MSG_DONE (0x00000001) + +struct mpp_bat_msg { + __u64 flag; + __u32 fd; + __s32 ret; +}; + +#endif /* _UAPI_RK_MPP_H */ From 0f41d6c9033f722a0d4a735b6b6417a9c8f622ba Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 31 Oct 2023 11:45:33 +0800 Subject: [PATCH 3/9] arm64: dts: rockchip: rk3326-evb: Fix bitclock-inversion simple-audio-card,bitclock-inversion is a boolean property. Signed-off-by: Sugar Zhang Change-Id: I141b6edcfbcbdafffed1d29b2b9273ac461e894e --- arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v10.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11-i2s-dmic.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v12.dts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v10.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v10.dts index 5a468b664935..0c1df2883456 100644 --- a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v10.dts +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v10.dts @@ -130,7 +130,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11-i2s-dmic.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11-i2s-dmic.dts index 38a5c92dffc8..6e8f2844e41d 100644 --- a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11-i2s-dmic.dts +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11-i2s-dmic.dts @@ -140,7 +140,7 @@ compatible = "simple-audio-card"; status = "disabled"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts index e098f199d498..f7af4fc9b720 100644 --- a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts @@ -130,7 +130,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v12.dts b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v12.dts index 1d4b8110b721..71024a93abb2 100644 --- a/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v12.dts +++ b/arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v12.dts @@ -130,7 +130,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { From e3f6c3e4c5006d03f4c6bf1f02789da88e7566a6 Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 31 Oct 2023 11:45:35 +0800 Subject: [PATCH 4/9] arm64: dts: rockchip: rk3399-tve1205g: Fix bitclock-inversion simple-audio-card,bitclock-inversion is a boolean property. Signed-off-by: Sugar Zhang Change-Id: I7a9d17eebe4b5037f3976a8b70e5bef44d24cdd3 --- arch/arm64/boot/dts/rockchip/rk3399-tve1205g.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3399-tve1205g.dts b/arch/arm64/boot/dts/rockchip/rk3399-tve1205g.dts index bdb18a9965a5..4927686c7f64 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-tve1205g.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-tve1205g.dts @@ -166,7 +166,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_b"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { From 6131b1b779640b4be87d7029f4f3947a60c0189a Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 31 Oct 2023 11:45:36 +0800 Subject: [PATCH 5/9] arm64: dts: rockchip: rk3528 boards: Fix bitclock-inversion simple-audio-card,bitclock-inversion is a boolean property. Signed-off-by: Sugar Zhang Change-Id: I019257ca1585bcb0c531589bc8a8205842cff00d --- arch/arm64/boot/dts/rockchip/rk3528-demo.dtsi | 2 +- arch/arm64/boot/dts/rockchip/rk3528-evb.dtsi | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3528-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3528-demo.dtsi index aebd9464dddd..353e75c82af4 100644 --- a/arch/arm64/boot/dts/rockchip/rk3528-demo.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3528-demo.dtsi @@ -50,7 +50,7 @@ status = "disabled"; compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <0>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3528-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3528-evb.dtsi index b737c44c3877..5d3998666ea7 100644 --- a/arch/arm64/boot/dts/rockchip/rk3528-evb.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3528-evb.dtsi @@ -49,7 +49,7 @@ status = "disabled"; compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <0>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { From 1e839d738b8a8b7710753739e85e2fdb74a352e4 Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 31 Oct 2023 11:45:38 +0800 Subject: [PATCH 6/9] arm64: dts: rockchip: rk356x boards: Fix bitclock-inversion simple-audio-card,bitclock-inversion is a boolean property. Signed-off-by: Sugar Zhang Change-Id: Ic8f1028e97a29e0af257a860be9b2022511c7a9a --- arch/arm64/boot/dts/rockchip/rk3566-box.dtsi | 2 +- arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi | 2 +- arch/arm64/boot/dts/rockchip/rk3568-toybrick-sd0.dtsi | 2 +- arch/arm64/boot/dts/rockchip/rk3568-toybrick.dtsi | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3566-box.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-box.dtsi index ae296857438e..77189ab9ae8f 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-box.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3566-box.dtsi @@ -42,7 +42,7 @@ status = "disabled"; compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <0>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi index f4ee805c3bf3..f13c2387f1d2 100644 --- a/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi @@ -151,7 +151,7 @@ status = "disabled"; compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <0>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-sd0.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-sd0.dtsi index 6041d1a1994c..7526f292b716 100644 --- a/arch/arm64/boot/dts/rockchip/rk3568-toybrick-sd0.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick-sd0.dtsi @@ -18,7 +18,7 @@ status = "okay"; compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <512>; simple-audio-card,name = "rockchip,bt"; #simple-audio-card,bitclock-master = <&sound2_master>; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-toybrick.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-toybrick.dtsi index db4a86dc54b2..39a507288946 100644 --- a/arch/arm64/boot/dts/rockchip/rk3568-toybrick.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3568-toybrick.dtsi @@ -169,7 +169,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_b"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; #simple-audio-card,bitclock-master = <&sound2_master>; From a86b62fb9b11243bb3b76df2e71e09d1dc2f72cc Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 31 Oct 2023 11:45:40 +0800 Subject: [PATCH 7/9] arm64: dts: rockchip: rk3588 boards: Fix bitclock-inversion simple-audio-card,bitclock-inversion is a boolean property. Signed-off-by: Sugar Zhang Change-Id: I2f69c4fd79b6f2b2cc06d69f720671227901482c --- arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi | 2 +- arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v10.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v20.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v21.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts | 2 +- arch/arm64/boot/dts/rockchip/rk3588s-tablet.dtsi | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi index dfc72aca41df..e2cffb18cadf 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi @@ -94,7 +94,7 @@ status = "disabled"; compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <0>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v10.dts b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v10.dts index 138d67b0a480..e4c9ef6e8822 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v10.dts +++ b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v10.dts @@ -20,7 +20,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v20.dts b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v20.dts index 8851802d9c88..a95cfcf467cf 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v20.dts +++ b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v20.dts @@ -19,7 +19,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v21.dts b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v21.dts index be6ede05dc5f..258ec54f349b 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v21.dts +++ b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v21.dts @@ -18,7 +18,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts index c51f55339127..e161b05b7984 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts +++ b/arch/arm64/boot/dts/rockchip/rk3588-vehicle-evb-v22.dts @@ -280,7 +280,7 @@ bt-sound { compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <1>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-tablet.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s-tablet.dtsi index 008ff6fb4816..6a971d6899a0 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588s-tablet.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588s-tablet.dtsi @@ -92,7 +92,7 @@ status = "disabled"; compatible = "simple-audio-card"; simple-audio-card,format = "dsp_a"; - simple-audio-card,bitclock-inversion = <0>; + simple-audio-card,bitclock-inversion; simple-audio-card,mclk-fs = <256>; simple-audio-card,name = "rockchip,bt"; simple-audio-card,cpu { From 5c222a001f3a580f645102b9bf4544d14049707d Mon Sep 17 00:00:00 2001 From: Mingwei Yan Date: Tue, 8 Aug 2023 18:20:28 +0800 Subject: [PATCH 8/9] media: rockchip: isp support to do reset in online mode Signed-off-by: Mingwei Yan Change-Id: I32a2aa91258130a69ec09e5743e27f8c85279322 Signed-off-by: Mingwei Yan --- drivers/media/platform/rockchip/isp/dev.h | 1 + .../platform/rockchip/isp/isp_external.h | 6 ++++ drivers/media/platform/rockchip/isp/rkisp.c | 33 ++++++++++++++++--- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/dev.h b/drivers/media/platform/rockchip/isp/dev.h index 89043eaba7b4..85b9990b1e54 100644 --- a/drivers/media/platform/rockchip/isp/dev.h +++ b/drivers/media/platform/rockchip/isp/dev.h @@ -81,6 +81,7 @@ enum rkisp_isp_state { ISP_START = BIT(9), ISP_ERROR = BIT(10), ISP_MIPI_ERROR = BIT(11), + ISP_CIF_RESET = BIT(12), }; enum rkisp_isp_inp { diff --git a/drivers/media/platform/rockchip/isp/isp_external.h b/drivers/media/platform/rockchip/isp/isp_external.h index 3fc155fd03c4..5de005fe8d0b 100644 --- a/drivers/media/platform/rockchip/isp/isp_external.h +++ b/drivers/media/platform/rockchip/isp/isp_external.h @@ -16,6 +16,12 @@ #define RKISP_VICAP_CMD_QUICK_STREAM \ _IOW('V', BASE_VIDIOC_PRIVATE + 3, int) +#define RKISP_VICAP_CMD_SET_RESET \ + _IOW('V', BASE_VIDIOC_PRIVATE + 4, int) + +#define RKISP_VICAP_CMD_SET_STREAM \ + _IOW('V', BASE_VIDIOC_PRIVATE + 5, int) + #define RKISP_VICAP_BUF_CNT 3 #define RKISP_VICAP_BUF_CNT_MAX 8 #define RKISP_RX_BUF_POOL_MAX (RKISP_VICAP_BUF_CNT_MAX * 3) diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index dedea22b876f..cd09209e9766 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -1231,8 +1231,11 @@ static void rkisp_restart_monitor(struct work_struct *work) /* isp stop to exit * isp err to reset * mipi err wait isp idle, then reset + * online vicap if isp err, notify vicap reset, then vicap notify isp reset + * by ioctl RKISP_VICAP_CMD_SET_STREAM */ if (monitor->state & ISP_STOP || + monitor->state & ISP_CIF_RESET || (ret && !(monitor->state & ISP_ERROR)) || (!ret && monitor->state & ISP_FRAME_END && @@ -1281,10 +1284,22 @@ static void rkisp_restart_monitor(struct work_struct *work) /* restart isp */ isp = hw->isp[hw->cur_dev_id]; - ret = rkisp_reset_handle(isp); - if (ret) { - monitor->is_en = false; - break; + if (!IS_HDR_RDBK(isp->hdr.op_mode) && isp->isp_ver >= ISP_V30) { + struct v4l2_subdev *remote = NULL; + struct v4l2_subdev *isp_subdev = NULL; + + isp_subdev = &(isp->isp_sdev.sd); + remote = get_remote_sensor(isp_subdev); + v4l2_subdev_call(remote, core, ioctl, + RKISP_VICAP_CMD_SET_RESET, NULL); + monitor->state |= ISP_CIF_RESET; + continue; + } else { + ret = rkisp_reset_handle(isp); + if (ret) { + monitor->is_en = false; + break; + } } for (i = 0; i < hw->dev_num; i++) { @@ -3521,6 +3536,13 @@ static long rkisp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) rkisp_hw_enum_isp_size(isp_dev->hw_dev); } break; + case RKISP_VICAP_CMD_SET_STREAM: + ret = rkisp_reset_handle(isp_dev); + if (!ret) { + if (isp_dev->hw_dev->monitor.state & ISP_CIF_RESET) + isp_dev->hw_dev->monitor.state &= ~ISP_CIF_RESET; + } + break; default: ret = -ENOIOCTLCMD; } @@ -3623,6 +3645,9 @@ static long rkisp_compat_ioctl32(struct v4l2_subdev *sd, case RKISP_CMD_MULTI_DEV_FORCE_ENUM: ret = rkisp_ioctl(sd, cmd, NULL); break; + case RKISP_VICAP_CMD_SET_STREAM: + ret = rkisp_ioctl(sd, cmd, NULL); + break; default: ret = -ENOIOCTLCMD; } From ccc60a624971b61ccbe2780289b39fae1c2e88d2 Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Fri, 21 Jul 2023 20:53:14 +0800 Subject: [PATCH 9/9] media: rockchip: vicap support to do reset in online mode Signed-off-by: Zefa Chen Change-Id: Ibea46658e5d9a41b4f5685838230321e9b71032e Signed-off-by: Mingwei Yan --- drivers/media/platform/rockchip/cif/capture.c | 29 ++++++++++++++++++- drivers/media/platform/rockchip/cif/dev.c | 2 ++ drivers/media/platform/rockchip/cif/dev.h | 1 + .../media/platform/rockchip/cif/subdev-itf.c | 9 ++++++ include/uapi/linux/rk-camera-module.h | 1 + 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 325430e03f11..113ce878134f 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -9075,6 +9075,15 @@ static void rkcif_set_sof(struct rkcif_device *cif_dev, u32 seq) } } +static void rkcif_toisp_set_stream(struct rkcif_device *dev, int on) +{ + struct v4l2_subdev *sd = get_rkisp_sd(dev->sditf[0]); + + if (sd) + v4l2_subdev_call(sd, core, ioctl, + RKISP_VICAP_CMD_SET_STREAM, &on); +} + static int rkcif_do_reset_work(struct rkcif_device *cif_dev, enum rkmodule_reset_src reset_src) { @@ -9181,6 +9190,9 @@ static int rkcif_do_reset_work(struct rkcif_device *cif_dev, } } + if (priv && priv->mode.rdbk_mode == RKISP_VICAP_ONLINE) + rkcif_toisp_set_stream(cif_dev, 1); + for (i = 0; i < j; i++) { stream = resume_stream[i]; stream->fs_cnt_in_single_frame = 0; @@ -9428,6 +9440,7 @@ static void rkcif_init_reset_work(struct rkcif_timer *timer) timer->csi2_err_cnt_even = 0; timer->csi2_err_fs_fe_cnt = 0; timer->notifer_called_cnt = 0; + dev->is_toisp_reset = false; for (i = 0; i < dev->num_channels; i++) { stream = &dev->stream[i]; if (stream->state == RKCIF_STATE_STREAMING) @@ -9437,10 +9450,10 @@ static void rkcif_init_reset_work(struct rkcif_timer *timer) if (timer->is_ctrl_by_user) { rkcif_send_reset_event(dev, timer->reset_src); } else { + dev->reset_work.reset_src = timer->reset_src; if (!schedule_work(&dev->reset_work.work)) v4l2_info(&dev->v4l2_dev, "schedule reset work failed\n"); - dev->reset_work.reset_src = timer->reset_src; } } @@ -9455,6 +9468,15 @@ static int rkcif_detect_reset_event(struct rkcif_stream *stream, int ret, is_reset = 0; struct rkmodule_vicap_reset_info rst_info; + if (dev->is_toisp_reset) { + is_reset = 1; + timer->reset_src = RKCIF_RESET_SRC_ERR_ISP; + } + if (is_reset) { + rkcif_init_reset_work(timer); + return is_reset; + } + if (timer->last_buf_wakeup_cnt[stream->id] < stream->buf_wake_up_cnt && check_cnt == 0) { @@ -10056,6 +10078,11 @@ static void rkcif_toisp_check_stop_status(struct sditf_priv *priv, cur_time = ktime_get_ns(); stream->readout.readout_time = cur_time - stream->readout.fs_timestamp; stream->readout.fs_timestamp = cur_time; + stream->buf_wake_up_cnt++; + if (stream->frame_idx % 2) + stream->fps_stats.frm0_timestamp = ktime_get_ns(); + else + stream->fps_stats.frm1_timestamp = ktime_get_ns(); if (stream->cifdev->rdbk_debug && stream->frame_idx < 15) v4l2_info(&priv->cif_dev->v4l2_dev, diff --git a/drivers/media/platform/rockchip/cif/dev.c b/drivers/media/platform/rockchip/cif/dev.c index dc0d863826ea..c2ad6c305095 100644 --- a/drivers/media/platform/rockchip/cif/dev.c +++ b/drivers/media/platform/rockchip/cif/dev.c @@ -1134,6 +1134,7 @@ static int rkcif_pipeline_set_stream(struct rkcif_pipeline *p, bool on) cif_dev->reset_watchdog_timer.is_triggered = false; cif_dev->reset_watchdog_timer.is_running = false; cif_dev->err_state_work.last_timestamp = 0; + cif_dev->is_toisp_reset = false; for (i = 0; i < cif_dev->num_channels; i++) cif_dev->reset_watchdog_timer.last_buf_wakeup_cnt[i] = 0; cif_dev->reset_watchdog_timer.run_cnt = 0; @@ -1218,6 +1219,7 @@ static int rkcif_pipeline_set_stream(struct rkcif_pipeline *p, bool on) cif_dev->is_start_hdr = true; cif_dev->reset_watchdog_timer.is_triggered = false; cif_dev->reset_watchdog_timer.is_running = false; + cif_dev->is_toisp_reset = false; for (i = 0; i < cif_dev->num_channels; i++) cif_dev->reset_watchdog_timer.last_buf_wakeup_cnt[i] = 0; cif_dev->reset_watchdog_timer.run_cnt = 0; diff --git a/drivers/media/platform/rockchip/cif/dev.h b/drivers/media/platform/rockchip/cif/dev.h index cf689c99d259..5122ec706f16 100644 --- a/drivers/media/platform/rockchip/cif/dev.h +++ b/drivers/media/platform/rockchip/cif/dev.h @@ -883,6 +883,7 @@ struct rkcif_device { bool is_support_tools; bool is_rtt_suspend; bool sensor_state_change; + bool is_toisp_reset; int rdbk_debug; struct rkcif_sync_cfg sync_cfg; int sditf_cnt; diff --git a/drivers/media/platform/rockchip/cif/subdev-itf.c b/drivers/media/platform/rockchip/cif/subdev-itf.c index 60021b069097..7ebeebde495c 100644 --- a/drivers/media/platform/rockchip/cif/subdev-itf.c +++ b/drivers/media/platform/rockchip/cif/subdev-itf.c @@ -383,6 +383,12 @@ static long sditf_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) rkcif_stream_suspend(cif_dev, RKCIF_RESUME_ISP); } break; + case RKISP_VICAP_CMD_SET_RESET: + if (priv->mode.rdbk_mode == RKISP_VICAP_ONLINE) { + cif_dev->is_toisp_reset = true; + return 0; + } + break; default: break; } @@ -440,6 +446,9 @@ static long sditf_compat_ioctl32(struct v4l2_subdev *sd, return -EFAULT; ret = sditf_ioctl(sd, cmd, &on); return ret; + case RKISP_VICAP_CMD_SET_RESET: + ret = sditf_ioctl(sd, cmd, NULL); + return ret; default: break; } diff --git a/include/uapi/linux/rk-camera-module.h b/include/uapi/linux/rk-camera-module.h index 7a825afaa279..68e57c0a9e41 100644 --- a/include/uapi/linux/rk-camera-module.h +++ b/include/uapi/linux/rk-camera-module.h @@ -638,6 +638,7 @@ enum rkmodule_reset_src { RKICF_RESET_SRC_ERR_CUTOFF, RKCIF_RESET_SRC_ERR_HOTPLUG, RKCIF_RESET_SRC_ERR_APP, + RKCIF_RESET_SRC_ERR_ISP, }; struct rkmodule_vicap_reset_info {