[PATCH 2/7] arm: mach-k3: j721e: Enable QoS for DSS

Jayesh Choudhary j-choudhary at ti.com
Thu May 30 13:52:06 CEST 2024


Hello Andrew,

On 22/05/24 21:14, Andrew Davis wrote:
> On 5/22/24 6:37 AM, Jayesh Choudhary wrote:
>> Enable Quality of Service (QoS) blocks for Display SubSystem (DSS), by
>> servicing the DSS - DDR traffic from the Real-Time (RT) queue. This is
>> done by setting the DSS DMA orderID to greater than 7.
>> ATYPE 3 is selected so that the traffic takes non-coherent path and does
> 
> So this is the part I'm not sure about, this change is not just a 
> performance
> adjustment, it can and does break things. The ORDERID setting is fine 
> with me,
> but changing ATYPE should be done in a separate patch so it can be 
> debated on
> its own.
>
>> not have a conflict with coherent traffic from C7x (deep-learning
>> applications).
>> Before setting up the QoS, the ORDERID needs to be mapped to VBUSM 
>> sources
>> using setup_navss_nb() function call that sets the threadmap for NBSS
>> registers. (Section 10.2.10.1.2 "NB Parameters" in TRM[0])
>>
>> Section 3.3.2 "Quality of Service (QoS)" in the TRM[0] provide more
>> details.
>>
>> [0]: https://www.ti.com/lit/zip/spruil1
>>
>> Signed-off-by: Jayesh Choudhary <j-choudhary at ti.com>
>> ---
>>   arch/arm/mach-k3/j721e/j721e_init.c         |  28 +++++
>>   arch/arm/mach-k3/r5/j721e/Makefile          |   1 +
>>   arch/arm/mach-k3/r5/j721e/j721e_qos.h       |  96 +++++++++++++++
>>   arch/arm/mach-k3/r5/j721e/j721e_qos_uboot.c | 125 ++++++++++++++++++++
>>   4 files changed, 250 insertions(+)
>>   create mode 100644 arch/arm/mach-k3/r5/j721e/j721e_qos.h
>>   create mode 100644 arch/arm/mach-k3/r5/j721e/j721e_qos_uboot.c
>>
>> diff --git a/arch/arm/mach-k3/j721e/j721e_init.c 
>> b/arch/arm/mach-k3/j721e/j721e_init.c
>> index c2024f2500..e9ed8cb267 100644
>> --- a/arch/arm/mach-k3/j721e/j721e_init.c
>> +++ b/arch/arm/mach-k3/j721e/j721e_init.c


[...]

>> diff --git a/arch/arm/mach-k3/r5/j721e/j721e_qos_uboot.c 
>> b/arch/arm/mach-k3/r5/j721e/j721e_qos_uboot.c
>> new file mode 100644
>> index 0000000000..c829057200
>> --- /dev/null
>> +++ b/arch/arm/mach-k3/r5/j721e/j721e_qos_uboot.c
>> @@ -0,0 +1,125 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * j721e Quality of Service (QoS) Configuration Data
>> + * Auto generated from K3 Resource Partitioning tool
>> + */
>> +
>> +#include <asm/arch/k3-qos.h>
>> +#include "j721e_qos.h"
>> +
>> +struct k3_qos_data qos_data[] = {
>> +    /* DSS_PIPE_VID1 - 2 endpoints, 2 channels */
>> +    {
>> +        .reg = K3_DSS_MAIN_0_DSS_INST0_VBUSM_DMA + 0x100 + 0x4 * 0,
> 
> 0x100 being the instance, and 0x4 * x being the specific device register 
> right?
> That could be encoded in a macro (the "Resource Partitioning tool" would
> be updated to generate that too).
> 
> Andrew
> 

Okay both val and reg could be updated.

>> +        .val = ATYPE_3 | ORDERID_15,
>> +    },
>> +    {
>> +        .reg = K3_DSS_MAIN_0_DSS_INST0_VBUSM_DMA + 0x100 + 0x4 * 1,
>> +        .val = ATYPE_3 | ORDERID_15,
>> +    },

[...]

>> +
>> +    /* Following registers set 1:1 mapping for orderID MAP1/MAP2
>> +     * remap registers. orderID x is remapped to orderID x again
>> +     * This is to ensure orderID from MAP register is unchanged
>> +     */
>> +
>> +    /* K3_DSS_MAIN_0_DSS_INST0_VBUSM_DMA - 2 groups */
>> +    {
>> +        .reg = K3_DSS_MAIN_0_DSS_INST0_VBUSM_DMA + 0,
>> +        .val = 0x76543210,
>> +    },
>> +    {
>> +        .reg = K3_DSS_MAIN_0_DSS_INST0_VBUSM_DMA + 4,
>> +        .val = 0xfedcba98,
>> +    },

 From the looks of it, these register and val can also be encoded as
K3_QOS_GROUP_REG and K3_QOS_GROUP_VAL_HIGH (0xfedcba98) and
K3_QOS_GROUP_VAL_LOW (0x76543210)????

[...]

>> +
>> +u32 qos_count = ARRAY_SIZE(qos_data);


More information about the U-Boot mailing list