Re: [PATCH] arm: mach-k3: Refactor QoS settings
On 06-Feb-24 22:58, Andrew Davis wrote: > On 2/6/24 2:56 AM, Aradhya Bhatia wrote: >> Refactor common QoS code into a new common header file, and the soc >> specific setup_qos functions into a common API. >> >> Rename $(soc)_qos_count and $(soc)_qos_data variables to qos_count and >> qos_data. When QoS settings of more SoCs are added, only one pair will >> be defined at a time, based on the config SOC_K3_$(soc). >> >> This refactoring has been done for 2 major purposes. >> >> - The auto-generated $(soc)_qos_data.c and $(soc)_qos.h files cannot >> have any code that is specific to any bootloader. Those files have to >> remain agnostic of different bootloader implementations and their >> header files. >> >> - The existing implementation was less than ideal and would have enabled >> multiple $(soc)_qos_count and $(soc)_qos_data variables for all SoC >> variants. >> >> Signed-off-by: Aradhya Bhatia >> --- >> arch/arm/mach-k3/Kconfig | 8 +++ >> arch/arm/mach-k3/am62a7_init.c | 14 >> arch/arm/mach-k3/common.c | 12 ++ >> arch/arm/mach-k3/common.h | 8 +++ >> arch/arm/mach-k3/include/mach/hardware.h | 9 >> arch/arm/mach-k3/include/mach/k3-qos.h | 22 +++ >> arch/arm/mach-k3/r5/am62ax/Makefile | 2 +- >> .../{include/mach => r5/am62ax}/am62a_qos.h | 0 >> .../{am62a_qos_data.c => am62a_qos_uboot.c} | 9 >> 9 files changed, 56 insertions(+), 28 deletions(-) >> create mode 100644 arch/arm/mach-k3/include/mach/k3-qos.h >> rename arch/arm/mach-k3/{include/mach => r5/am62ax}/am62a_qos.h (100%) >> rename arch/arm/mach-k3/r5/am62ax/{am62a_qos_data.c => >> am62a_qos_uboot.c} (85%) >> >> diff --git a/arch/arm/mach-k3/Kconfig b/arch/arm/mach-k3/Kconfig >> index 03898424c954..ffc4a9c29029 100644 >> --- a/arch/arm/mach-k3/Kconfig >> +++ b/arch/arm/mach-k3/Kconfig >> @@ -139,6 +139,14 @@ config K3_DM_FW >> bootloader, it makes RM and PM services not being available >> during R5 SPL execution time. >> +config K3_QOS >> + bool "Enable Quality of Service (QoS) Settings for TI K3 SoCs" >> + default y if CPU_V7R && SOC_K3_AM62A7 > > If this is R5 only, then put it in the arch/arm/mach-k3/r5 Kconfig > and you can drop the CPU_V7R check. > > Andrew That would indeed be better. Thanks! Regards Aradhya > >> + help >> + This option enables the R5 SPL to apply QoS settings for various >> + HW controllers inside the TI K3 SoCs. The files for QoS >> settings are >> + generated from Sysconfig and k3-resource-partitioning tools. >> + >> config K3_X509_SWRV >> int "SWRV for X509 certificate used for boot images" >> default 1 >> diff --git a/arch/arm/mach-k3/am62a7_init.c >> b/arch/arm/mach-k3/am62a7_init.c >> index d72e19936b9b..080274e3af58 100644 >> --- a/arch/arm/mach-k3/am62a7_init.c >> +++ b/arch/arm/mach-k3/am62a7_init.c >> @@ -69,20 +69,6 @@ static void ctrl_mmr_unlock(void) >> mmr_unlock(PADCFG_MMR1_BASE, 1); >> } >> -#if (IS_ENABLED(CONFIG_CPU_V7R)) >> -static void setup_qos(void) >> -{ >> - u32 i; >> - >> - for (i = 0; i < am62a_qos_count; i++) >> - writel(am62a_qos_data[i].val, (uintptr_t)am62a_qos_data[i].reg); >> -} >> -#else >> -static void setup_qos(void) >> -{ >> -} >> -#endif >> - >> void board_init_f(ulong dummy) >> { >> struct udevice *dev; >> diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c >> index f411366778f0..b54f2ddc4729 100644 >> --- a/arch/arm/mach-k3/common.c >> +++ b/arch/arm/mach-k3/common.c >> @@ -28,6 +28,8 @@ >> #include >> #include >> +#include >> + >> #if IS_ENABLED(CONFIG_SYS_K3_SPL_ATF) >> enum { >> IMAGE_ID_ATF, >> @@ -595,3 +597,13 @@ int misc_init_r(void) >> void __weak do_board_detect(void) >> { >> } >> + >> +#if (IS_ENABLED(CONFIG_K3_QOS)) >> +void setup_qos(void) >> +{ >> + u32 i; >> + >> + for (i = 0; i < qos_count; i++) >> + writel(qos_data[i].val, (uintptr_t)qos_data[i].reg); >> +} >> +#endif >> diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h >> index e9db9fbfb63d..53aa186b31a4 100644 >> --- a/arch/arm/mach-k3/common.h >> +++ b/arch/arm/mach-k3/common.h >> @@ -45,3 +45,11 @@ void ti_secure_image_post_process(void **p_image, >> size_t *p_size); >> struct ti_sci_handle *get_ti_sci_handle(void); >> void do_board_detect(void); >> void ti_secure_image_check_binary(void **p_image, size_t *p_size); >> + >> +#if (IS_ENABLED(CONFIG_K3_QOS)) >> +void setup_qos(void); >> +#else >> +static inline void setup_qos(void) >> +{ >> +} >> +#endif >> diff --git a/arch/arm/mach-k3/include/mach/hardware.h >> b/arch/arm/mach-k3/include/mach/hardware.h >> index a1a9dfbde66c..52ef82e70b07 100644 >> --- a/arch/arm/mach-k3/include/mach/hardware.h >> +++ b/arch/arm/mach-k3/include/mach/hardware.h >> @@ -30,7 +30,6 @@ >> #ifdef
Re: [PATCH] arm: mach-k3: Refactor QoS settings
On 2/6/24 2:56 AM, Aradhya Bhatia wrote: Refactor common QoS code into a new common header file, and the soc specific setup_qos functions into a common API. Rename $(soc)_qos_count and $(soc)_qos_data variables to qos_count and qos_data. When QoS settings of more SoCs are added, only one pair will be defined at a time, based on the config SOC_K3_$(soc). This refactoring has been done for 2 major purposes. - The auto-generated $(soc)_qos_data.c and $(soc)_qos.h files cannot have any code that is specific to any bootloader. Those files have to remain agnostic of different bootloader implementations and their header files. - The existing implementation was less than ideal and would have enabled multiple $(soc)_qos_count and $(soc)_qos_data variables for all SoC variants. Signed-off-by: Aradhya Bhatia --- arch/arm/mach-k3/Kconfig | 8 +++ arch/arm/mach-k3/am62a7_init.c| 14 arch/arm/mach-k3/common.c | 12 ++ arch/arm/mach-k3/common.h | 8 +++ arch/arm/mach-k3/include/mach/hardware.h | 9 arch/arm/mach-k3/include/mach/k3-qos.h| 22 +++ arch/arm/mach-k3/r5/am62ax/Makefile | 2 +- .../{include/mach => r5/am62ax}/am62a_qos.h | 0 .../{am62a_qos_data.c => am62a_qos_uboot.c} | 9 9 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 arch/arm/mach-k3/include/mach/k3-qos.h rename arch/arm/mach-k3/{include/mach => r5/am62ax}/am62a_qos.h (100%) rename arch/arm/mach-k3/r5/am62ax/{am62a_qos_data.c => am62a_qos_uboot.c} (85%) diff --git a/arch/arm/mach-k3/Kconfig b/arch/arm/mach-k3/Kconfig index 03898424c954..ffc4a9c29029 100644 --- a/arch/arm/mach-k3/Kconfig +++ b/arch/arm/mach-k3/Kconfig @@ -139,6 +139,14 @@ config K3_DM_FW bootloader, it makes RM and PM services not being available during R5 SPL execution time. +config K3_QOS + bool "Enable Quality of Service (QoS) Settings for TI K3 SoCs" + default y if CPU_V7R && SOC_K3_AM62A7 If this is R5 only, then put it in the arch/arm/mach-k3/r5 Kconfig and you can drop the CPU_V7R check. Andrew + help + This option enables the R5 SPL to apply QoS settings for various + HW controllers inside the TI K3 SoCs. The files for QoS settings are + generated from Sysconfig and k3-resource-partitioning tools. + config K3_X509_SWRV int "SWRV for X509 certificate used for boot images" default 1 diff --git a/arch/arm/mach-k3/am62a7_init.c b/arch/arm/mach-k3/am62a7_init.c index d72e19936b9b..080274e3af58 100644 --- a/arch/arm/mach-k3/am62a7_init.c +++ b/arch/arm/mach-k3/am62a7_init.c @@ -69,20 +69,6 @@ static void ctrl_mmr_unlock(void) mmr_unlock(PADCFG_MMR1_BASE, 1); } -#if (IS_ENABLED(CONFIG_CPU_V7R)) -static void setup_qos(void) -{ - u32 i; - - for (i = 0; i < am62a_qos_count; i++) - writel(am62a_qos_data[i].val, (uintptr_t)am62a_qos_data[i].reg); -} -#else -static void setup_qos(void) -{ -} -#endif - void board_init_f(ulong dummy) { struct udevice *dev; diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c index f411366778f0..b54f2ddc4729 100644 --- a/arch/arm/mach-k3/common.c +++ b/arch/arm/mach-k3/common.c @@ -28,6 +28,8 @@ #include #include +#include + #if IS_ENABLED(CONFIG_SYS_K3_SPL_ATF) enum { IMAGE_ID_ATF, @@ -595,3 +597,13 @@ int misc_init_r(void) void __weak do_board_detect(void) { } + +#if (IS_ENABLED(CONFIG_K3_QOS)) +void setup_qos(void) +{ + u32 i; + + for (i = 0; i < qos_count; i++) + writel(qos_data[i].val, (uintptr_t)qos_data[i].reg); +} +#endif diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h index e9db9fbfb63d..53aa186b31a4 100644 --- a/arch/arm/mach-k3/common.h +++ b/arch/arm/mach-k3/common.h @@ -45,3 +45,11 @@ void ti_secure_image_post_process(void **p_image, size_t *p_size); struct ti_sci_handle *get_ti_sci_handle(void); void do_board_detect(void); void ti_secure_image_check_binary(void **p_image, size_t *p_size); + +#if (IS_ENABLED(CONFIG_K3_QOS)) +void setup_qos(void); +#else +static inline void setup_qos(void) +{ +} +#endif diff --git a/arch/arm/mach-k3/include/mach/hardware.h b/arch/arm/mach-k3/include/mach/hardware.h index a1a9dfbde66c..52ef82e70b07 100644 --- a/arch/arm/mach-k3/include/mach/hardware.h +++ b/arch/arm/mach-k3/include/mach/hardware.h @@ -30,7 +30,6 @@ #ifdef CONFIG_SOC_K3_AM62A7 #include "am62a_hardware.h" -#include "am62a_qos.h" #endif /* Assuming these addresses and definitions stay common across K3 devices */ @@ -97,12 +96,4 @@ struct rom_extended_boot_data { u32 num_components; }; -struct k3_qos_data { - u32 reg; - u32 val; -}; - -extern struct k3_qos_data am62a_qos_data[]; -extern u32 am62a_qos_count; - #endif /* _ASM_ARCH_HARDWARE_H_ */ diff
[PATCH] arm: mach-k3: Refactor QoS settings
Refactor common QoS code into a new common header file, and the soc specific setup_qos functions into a common API. Rename $(soc)_qos_count and $(soc)_qos_data variables to qos_count and qos_data. When QoS settings of more SoCs are added, only one pair will be defined at a time, based on the config SOC_K3_$(soc). This refactoring has been done for 2 major purposes. - The auto-generated $(soc)_qos_data.c and $(soc)_qos.h files cannot have any code that is specific to any bootloader. Those files have to remain agnostic of different bootloader implementations and their header files. - The existing implementation was less than ideal and would have enabled multiple $(soc)_qos_count and $(soc)_qos_data variables for all SoC variants. Signed-off-by: Aradhya Bhatia --- arch/arm/mach-k3/Kconfig | 8 +++ arch/arm/mach-k3/am62a7_init.c| 14 arch/arm/mach-k3/common.c | 12 ++ arch/arm/mach-k3/common.h | 8 +++ arch/arm/mach-k3/include/mach/hardware.h | 9 arch/arm/mach-k3/include/mach/k3-qos.h| 22 +++ arch/arm/mach-k3/r5/am62ax/Makefile | 2 +- .../{include/mach => r5/am62ax}/am62a_qos.h | 0 .../{am62a_qos_data.c => am62a_qos_uboot.c} | 9 9 files changed, 56 insertions(+), 28 deletions(-) create mode 100644 arch/arm/mach-k3/include/mach/k3-qos.h rename arch/arm/mach-k3/{include/mach => r5/am62ax}/am62a_qos.h (100%) rename arch/arm/mach-k3/r5/am62ax/{am62a_qos_data.c => am62a_qos_uboot.c} (85%) diff --git a/arch/arm/mach-k3/Kconfig b/arch/arm/mach-k3/Kconfig index 03898424c954..ffc4a9c29029 100644 --- a/arch/arm/mach-k3/Kconfig +++ b/arch/arm/mach-k3/Kconfig @@ -139,6 +139,14 @@ config K3_DM_FW bootloader, it makes RM and PM services not being available during R5 SPL execution time. +config K3_QOS + bool "Enable Quality of Service (QoS) Settings for TI K3 SoCs" + default y if CPU_V7R && SOC_K3_AM62A7 + help + This option enables the R5 SPL to apply QoS settings for various + HW controllers inside the TI K3 SoCs. The files for QoS settings are + generated from Sysconfig and k3-resource-partitioning tools. + config K3_X509_SWRV int "SWRV for X509 certificate used for boot images" default 1 diff --git a/arch/arm/mach-k3/am62a7_init.c b/arch/arm/mach-k3/am62a7_init.c index d72e19936b9b..080274e3af58 100644 --- a/arch/arm/mach-k3/am62a7_init.c +++ b/arch/arm/mach-k3/am62a7_init.c @@ -69,20 +69,6 @@ static void ctrl_mmr_unlock(void) mmr_unlock(PADCFG_MMR1_BASE, 1); } -#if (IS_ENABLED(CONFIG_CPU_V7R)) -static void setup_qos(void) -{ - u32 i; - - for (i = 0; i < am62a_qos_count; i++) - writel(am62a_qos_data[i].val, (uintptr_t)am62a_qos_data[i].reg); -} -#else -static void setup_qos(void) -{ -} -#endif - void board_init_f(ulong dummy) { struct udevice *dev; diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c index f411366778f0..b54f2ddc4729 100644 --- a/arch/arm/mach-k3/common.c +++ b/arch/arm/mach-k3/common.c @@ -28,6 +28,8 @@ #include #include +#include + #if IS_ENABLED(CONFIG_SYS_K3_SPL_ATF) enum { IMAGE_ID_ATF, @@ -595,3 +597,13 @@ int misc_init_r(void) void __weak do_board_detect(void) { } + +#if (IS_ENABLED(CONFIG_K3_QOS)) +void setup_qos(void) +{ + u32 i; + + for (i = 0; i < qos_count; i++) + writel(qos_data[i].val, (uintptr_t)qos_data[i].reg); +} +#endif diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h index e9db9fbfb63d..53aa186b31a4 100644 --- a/arch/arm/mach-k3/common.h +++ b/arch/arm/mach-k3/common.h @@ -45,3 +45,11 @@ void ti_secure_image_post_process(void **p_image, size_t *p_size); struct ti_sci_handle *get_ti_sci_handle(void); void do_board_detect(void); void ti_secure_image_check_binary(void **p_image, size_t *p_size); + +#if (IS_ENABLED(CONFIG_K3_QOS)) +void setup_qos(void); +#else +static inline void setup_qos(void) +{ +} +#endif diff --git a/arch/arm/mach-k3/include/mach/hardware.h b/arch/arm/mach-k3/include/mach/hardware.h index a1a9dfbde66c..52ef82e70b07 100644 --- a/arch/arm/mach-k3/include/mach/hardware.h +++ b/arch/arm/mach-k3/include/mach/hardware.h @@ -30,7 +30,6 @@ #ifdef CONFIG_SOC_K3_AM62A7 #include "am62a_hardware.h" -#include "am62a_qos.h" #endif /* Assuming these addresses and definitions stay common across K3 devices */ @@ -97,12 +96,4 @@ struct rom_extended_boot_data { u32 num_components; }; -struct k3_qos_data { - u32 reg; - u32 val; -}; - -extern struct k3_qos_data am62a_qos_data[]; -extern u32 am62a_qos_count; - #endif /* _ASM_ARCH_HARDWARE_H_ */ diff --git a/arch/arm/mach-k3/include/mach/k3-qos.h b/arch/arm/mach-k3/include/mach/k3-qos.h new file mode 100644 index ..e00e1de5b9cb --- /dev/null +++ b/arch/arm/mach-k3/include/mach/k3-qos.h @@ -0,0