[U-Boot] [PATCH v2] miniarm-rk3288: set isp/vop qos priority level

Nickey.Yang nickey.yang at rock-chips.com
Thu Dec 15 08:18:10 CET 2016


Hi Kever & Simon,


在 2016年12月14日 15:07, Kever Yang 写道:
> Hi Simon,
>
> On 12/12/2016 04:27 AM, Simon Glass wrote:
>> Hi Nickey,
>>
>> On 8 December 2016 at 21:39, Nickey Yang <nickey.yang at rock-chips.com> 
>> wrote:
>>> isp-camera image will be broken when enter dual screen display mode.
>>> We set isp qos high to solve this problem.
>>>
>>> Signed-off-by: Nickey Yang <nickey.yang at rock-chips.com>
>>> ---
>>>   arch/arm/include/asm/arch-rockchip/qos_rk3288.h | 21 
>>> +++++++++++++++++++++
>>>   board/rockchip/miniarm_rk3288/miniarm-rk3288.c  | 21 
>>> +++++++++++++++++++++
>>>   2 files changed, 42 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..d3d6c3e
>>> --- /dev/null
>>> +++ b/arch/arm/include/asm/arch-rockchip/qos_rk3288.h
>>> @@ -0,0 +1,21 @@
>>> +/*
>>> + * Copyright 2016 Rockchip Inc.
>>> + *
>>> + * SPDX-License-Identifier:     GPL-2.0+
>>> + */
>>> +#ifndef _ASM_ARCH_QOS_RK3288_H
>>> +#define _ASM_ARCH_QOS_RK3288_H
>>> +
>>> +/* cpu axi qos priority */
>>> +#define CPU_AXI_QOS_PRIORITY_LEVEL(h, l) \
>>> +       ((((h) & 3) << 2) | ((l) & 3))
>> Can you instead define
>>
>> XXX_SHIFT   2
>> XXX_MASK  (3 << XXX_SHIFT)
>>
>> and then use these in the .c code?
>>
>>> +
>>> +#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/board/rockchip/miniarm_rk3288/miniarm-rk3288.c 
>>> b/board/rockchip/miniarm_rk3288/miniarm-rk3288.c
>>> index 79541a3..ba0f3a3 100644
>>> --- a/board/rockchip/miniarm_rk3288/miniarm-rk3288.c
>>> +++ b/board/rockchip/miniarm_rk3288/miniarm-rk3288.c
>>> @@ -5,3 +5,24 @@
>>>    */
>>>
>>>   #include <common.h>
>>> +#include <asm/io.h>
>>> +#include <asm/arch/qos_rk3288.h>
>>> +
>>> +int rk_board_late_init(void)
>>> +{
>>> +       /* set isp qos to higher priority */
>>> +       writel(CPU_AXI_QOS_PRIORITY_LEVEL(2, 2),
>>> +              VIO1_ISP_R_QOS + CPU_AXI_QOS_PRIORITY);
>>> +       writel(CPU_AXI_QOS_PRIORITY_LEVEL(2, 2),
>>> +              VIO1_ISP_W0_QOS + CPU_AXI_QOS_PRIORITY);
>>> +       writel(CPU_AXI_QOS_PRIORITY_LEVEL(2, 2),
>>> +              VIO1_ISP_W1_QOS + CPU_AXI_QOS_PRIORITY);
>>> +
>>> +       /* set vop qos to higher priority */
>>> +       writel(CPU_AXI_QOS_PRIORITY_LEVEL(2, 2),
>>> +              VIO0_VOP_QOS + CPU_AXI_QOS_PRIORITY);
>>> +       writel(CPU_AXI_QOS_PRIORITY_LEVEL(2, 2),
>>> +              VIO1_VOP_QOS + CPU_AXI_QOS_PRIORITY);
>> Can you add a register struct for this in 
>> arch/arm/include/asm/arch-rockchip/ ?
>>
>> Also I think it would be best to put this code somewhere in
>> arch/arm/mach-rockchip and call it from your late init routine.
>
> I understand people don't like source cod in hardcode(or nearly) and 
> out of
> any framwork, but there do have some different one time init program for
> different SoC or board, I think it's OK to add then in soc_init() or 
> board_init()
> with appropriate comment.
>
> Back to the case here, setting the ISP NOC niu to higher priority is 
> only needed
> for the miniarm board for the use case in that board. It might have 
> other requirement
> for other board for different use cases, so it's OK to add the code in 
> board file.
> I think you would like to have some API function for this setting then 
> different board can use it
> instead of do SoC setting in board file, right?
> Before other board need this blob of code, would it be more clear to 
> put the code in board file?
>
or in arch/arm/mach-rockchip/rk3288-board.c
+    __weak int rk_qos_init(void)
+{
+    /* do  set  vop  qos level  */
+   }

int board_late_init(void)
  {
         setup_boot_mode();
+       rk_qos_init();

}

in board/rockchip/miniarm_rk3288/miniarm-rk3288.c
+int rk_qos_init(void)
+{
+    /* do  set vop  qos level  */
+    /* do  set isp qos level  */
+}

Whether this is  a better way?

> @Nickey, I'm sure the patch V3 is not what we need. Simon's suggestion 
> could be detail in this:
> - add a rk3288_qos_init() in arch/arm/mach-rockchip/rk3288-board.c
> - call the rk3288_qos_init() in rk_board_late_init() of 
> board/rockchip/miniarm_rk3288/miniarm-rk3288.c
>
> Thanks,
> - Kever
>>
>>> +
>>> +       return 0;
>>> +}
>>> -- 
>>> 1.9.1
>>>
>>>
>> Regards,
>> Simon
>>
>>
>>
>
>
>
>




More information about the U-Boot mailing list