[U-Boot] [PATCH v3] rockchip: rk3288: set isp/vop qos priority level

Isp-camera preview image will be broken when dual screen display mode. This patch set isp/vop qos level higher to solve this problem. We have verified this patch on rk3288-miniarm board.
Signed-off-by: Nickey Yang nickey.yang@rock-chips.com --- arch/arm/include/asm/arch-rockchip/qos_rk3288.h | 26 +++++++++++++++++++++++++ arch/arm/mach-rockchip/rk3288-board.c | 15 ++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 arch/arm/include/asm/arch-rockchip/qos_rk3288.h
diff --git a/arch/arm/include/asm/arch-rockchip/qos_rk3288.h b/arch/arm/include/asm/arch-rockchip/qos_rk3288.h new file mode 100644 index 0000000..f0420ba --- /dev/null +++ b/arch/arm/include/asm/arch-rockchip/qos_rk3288.h @@ -0,0 +1,26 @@ +/* + * Copyright 2016 Rockchip Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#ifndef _ASM_ARCH_QOS_RK3288_H +#define _ASM_ARCH_QOS_RK3288_H + +#define PRIORITY_HIGH_SHIFT 2 +#define PRIORITY_LOW_SHIFT 0 +#define PRIORITY_MASK 3 + +#define PRIORITY_HIGH_VAL(h) \ + (((h) & PRIORITY_MASK) << PRIORITY_HIGH_SHIFT) +#define PRIORITY_LOW_VAL(l) \ + (((l) & PRIORITY_MASK) << PRIORITY_LOW_SHIFT) + +#define CPU_AXI_QOS_PRIORITY 0x08 + +#define VIO0_VOP_QOS 0xffad0400 +#define VIO1_VOP_QOS 0xffad0000 +#define VIO1_ISP_R_QOS 0xffad0900 +#define VIO1_ISP_W0_QOS 0xffad0100 +#define VIO1_ISP_W1_QOS 0xffad0180 + +#endif diff --git a/arch/arm/mach-rockchip/rk3288-board.c b/arch/arm/mach-rockchip/rk3288-board.c index 411bb29..b54c40a 100644 --- a/arch/arm/mach-rockchip/rk3288-board.c +++ b/arch/arm/mach-rockchip/rk3288-board.c @@ -13,6 +13,7 @@ #include <asm/arch/clock.h> #include <asm/arch/periph.h> #include <asm/arch/pmu_rk3288.h> +#include <asm/arch/qos_rk3288.h> #include <asm/arch/boot_mode.h> #include <asm/arch/timer.h> #include <asm/gpio.h> @@ -54,6 +55,20 @@ int board_late_init(void) { setup_boot_mode();
+ /* set vop qos to higher priority */ + writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2), + VIO0_VOP_QOS + CPU_AXI_QOS_PRIORITY); + writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2), + VIO1_VOP_QOS + CPU_AXI_QOS_PRIORITY); + + /* set isp qos to higher priority */ + writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2), + VIO1_ISP_R_QOS + CPU_AXI_QOS_PRIORITY); + writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2), + VIO1_ISP_W0_QOS + CPU_AXI_QOS_PRIORITY); + writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2), + VIO1_ISP_W1_QOS + CPU_AXI_QOS_PRIORITY); + return rk_board_late_init(); }

Hi Nickey,
On 13 December 2016 at 00:24, Nickey Yang nickey.yang@rock-chips.com wrote:
Isp-camera preview image will be broken when dual screen display mode. This patch set isp/vop qos level higher to solve this problem. We have verified this patch on rk3288-miniarm board.
Signed-off-by: Nickey Yang nickey.yang@rock-chips.com
arch/arm/include/asm/arch-rockchip/qos_rk3288.h | 26 +++++++++++++++++++++++++ arch/arm/mach-rockchip/rk3288-board.c | 15 ++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 arch/arm/include/asm/arch-rockchip/qos_rk3288.h
diff --git a/arch/arm/include/asm/arch-rockchip/qos_rk3288.h b/arch/arm/include/asm/arch-rockchip/qos_rk3288.h new file mode 100644 index 0000000..f0420ba --- /dev/null +++ b/arch/arm/include/asm/arch-rockchip/qos_rk3288.h @@ -0,0 +1,26 @@ +/*
- Copyright 2016 Rockchip Inc.
- SPDX-License-Identifier: GPL-2.0+
- */
+#ifndef _ASM_ARCH_QOS_RK3288_H +#define _ASM_ARCH_QOS_RK3288_H
+#define PRIORITY_HIGH_SHIFT 2 +#define PRIORITY_LOW_SHIFT 0 +#define PRIORITY_MASK 3
+#define PRIORITY_HIGH_VAL(h) \
(((h) & PRIORITY_MASK) << PRIORITY_HIGH_SHIFT)
+#define PRIORITY_LOW_VAL(l) \
(((l) & PRIORITY_MASK) << PRIORITY_LOW_SHIFT)
I'm not keen on these two. Please see below.
+#define CPU_AXI_QOS_PRIORITY 0x08
+#define VIO0_VOP_QOS 0xffad0400 +#define VIO1_VOP_QOS 0xffad0000 +#define VIO1_ISP_R_QOS 0xffad0900 +#define VIO1_ISP_W0_QOS 0xffad0100 +#define VIO1_ISP_W1_QOS 0xffad0180
+#endif diff --git a/arch/arm/mach-rockchip/rk3288-board.c b/arch/arm/mach-rockchip/rk3288-board.c index 411bb29..b54c40a 100644 --- a/arch/arm/mach-rockchip/rk3288-board.c +++ b/arch/arm/mach-rockchip/rk3288-board.c @@ -13,6 +13,7 @@ #include <asm/arch/clock.h> #include <asm/arch/periph.h> #include <asm/arch/pmu_rk3288.h> +#include <asm/arch/qos_rk3288.h> #include <asm/arch/boot_mode.h> #include <asm/arch/timer.h> #include <asm/gpio.h> @@ -54,6 +55,20 @@ int board_late_init(void) { setup_boot_mode();
/* set vop qos to higher priority */
writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2),
VIO0_VOP_QOS + CPU_AXI_QOS_PRIORITY);
writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2),
VIO1_VOP_QOS + CPU_AXI_QOS_PRIORITY);
How about:
int val = 2 << PRIORITY_HIGH_SHIFT | 2 << PRIORITY_LOW_SHIFT;
writel(val, CPU_AXI_QOS_PRIORITY + VIO0_VOP_QOS)
i.e. put the register base first (before the +).
/* set isp qos to higher priority */
writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2),
VIO1_ISP_R_QOS + CPU_AXI_QOS_PRIORITY);
writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2),
VIO1_ISP_W0_QOS + CPU_AXI_QOS_PRIORITY);
writel(PRIORITY_HIGH_VAL(2) | PRIORITY_LOW_VAL(2),
VIO1_ISP_W1_QOS + CPU_AXI_QOS_PRIORITY);
return rk_board_late_init();
}
-- 1.9.1
Regards, Simon
participants (2)
-
Nickey Yang
-
Simon Glass