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

Simon Glass sjg at chromium.org
Sat Dec 17 23:47:00 CET 2016


Hi Nickey,

On 13 December 2016 at 00:24, Nickey Yang <nickey.yang at 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 at 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


More information about the U-Boot mailing list