clk / soc: renesas: Rework Kconfig and Makefile logic
Subsystems (3)
Geert Uytterhoeven
maintainercover clk / soc: renesas: Rework Kconfig and Makefile logic
Hi all,
This RFC patch series reworks the Kconfig and Makefile logic for the Renesas clock and SoC drivers. It was sparked by a discussion with Olof about the Renesas clock driver dependencies.
The goals are to:
- Allow precise control over and automatic selection of which (sub)drivers are used for which SoC (which may change in the future),
- Allow adding support for new SoCs easily,
- Allow compile-testing of all (sub)drivers,
- Keep driver selection logic in the subsystem-specific Kconfig independent from the architecture-specific Kconfig (i.e. no "select" from arch/arm64/Kconfig.platforms), to avoid dependencies.
The series can't be applied as-is, because compile-testing all drivers depends on independent fixes, some in other subsystems.
More details are provided in the individual patch descriptions.
For testing, this patch series, plus several fixes to allow more compile-testing, are available in the topic/clk-soc-renesas-Kconfig-rework branch of my renesas-drivers git repository atgit://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git.
This has been tested on R-Car Gen2 and Gen3, and compile-tested for various other configurations.
Thanks for your comments!
Geert Uytterhoeven (2):
[RFC] clk: renesas: Rework Kconfig and Makefile logic [RFC] soc: renesas: Rework Kconfig and Makefile logic
drivers/clk/Makefile | 2 +- drivers/clk/renesas/Kconfig | 129 ++++++++++++++++++++++++++++----- drivers/clk/renesas/Makefile | 37 +++++----- drivers/clk/renesas/renesas-cpg-mssr.c | 8 +- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 2 +- drivers/soc/renesas/Kconfig | 63 ++++++++++++++++ drivers/soc/renesas/Makefile | 31 ++++---- drivers/soc/renesas/rcar-sysc.c | 24 +++--- include/linux/soc/renesas/rcar-rst.h | 3 +- 10 files changed, 229 insertions(+), 71 deletions(-) create mode 100644 drivers/soc/renesas/Kconfig
Signature · 12 lines
2.7.4
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus TorvaldsGeert Uytterhoeven
maintainerPATCH 1/2 clk: renesas: Rework Kconfig and Makefile logic
The goals are to:
- Allow precise control over and automatic selection of which (sub)drivers are used for which SoC (which may change in the future),
- Allow adding support for new SoCs easily,
- Allow compile-testing of all (sub)drivers,
- Keep driver selection logic in the subsystem-specific Kconfig independent from the architecture-specific Kconfig (i.e. no "select" from arch/arm64/Kconfig.platforms), to avoid dependencies.
This is implemented by:
- Introducing Kconfig symbols for all drivers and sub-drivers,
- Introducing the Kconfig symbol CLK_RENESAS, which is enabled automatically when building for a Renesas ARM platform, and which enables all required drivers without interaction of the user, based on SoC-specific ARCH_* symbols,
- Allowing the user to enable any Kconfig symbol manually if COMPILE_TEST is enabled,
- Using the new Kconfig symbols instead of the ARCH_* symbols to control compilation in the Makefile,
- Always entering drivers/clk/renesas/ during the build.
---
This rework was sparked by a discussion with Olof about the Renesas clock driver dependencies.
For now, some of the 'bool "foo clock support" if COMPILE_TEST' will need to be replaced by 'bool', as compile-testing all drivers depends on independent fixes, some in other subsystems.
Before anyone responds "But the CLK_R8A779[0-4] symbols can be removed, just select CLK_RCAR_GEN2 directly!": the latter will go away, as the shared R-Car Gen2 clock driver (which depends on describing most clocks in DT, which is error prone, inflexible, and which prevents implementing module reset support) will be replaced by SoC-specific drivers using the CPG/MSSR driver core, as is already done on R-Car Gen3 and on RZ/G. Compatibility with old DTBs will be preserved through a new Kconfig option.
--- drivers/clk/Makefile | 2 +- drivers/clk/renesas/Kconfig | 129 ++++++++++++++++++++++++++++----- drivers/clk/renesas/Makefile | 37 +++++----- drivers/clk/renesas/renesas-cpg-mssr.c | 8 +- 4 files changed, 137 insertions(+), 39 deletions(-)
drivers/clk/Makefile +1 -1
@@ -74,7 +74,7 @@ obj-$(CONFIG_COMMON_CLK_NXP) += nxp/ obj-$(CONFIG_MACH_PISTACHIO) += pistachio/ obj-$(CONFIG_COMMON_CLK_PXA) += pxa/ obj-$(CONFIG_COMMON_CLK_QCOM) += qcom/ -obj-$(CONFIG_ARCH_RENESAS) += renesas/ +obj-y += renesas/ obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/ obj-$(CONFIG_COMMON_CLK_SAMSUNG) += samsung/ obj-$(CONFIG_ARCH_SIRF) += sirf/
drivers/clk/renesas/Kconfig +112 -17
132 lines not on this page · raw message
drivers/clk/renesas/Makefile +20 -17
@@ -1,19 +1,22 @@ -obj-$(CONFIG_ARCH_EMEV2) += clk-emev2.o -obj-$(CONFIG_ARCH_R7S72100) += clk-rz.o -obj-$(CONFIG_ARCH_R8A73A4) += clk-r8a73a4.o clk-div6.o -obj-$(CONFIG_ARCH_R8A7740) += clk-r8a7740.o clk-div6.o -obj-$(CONFIG_ARCH_R8A7743) += r8a7743-cpg-mssr.o rcar-gen2-cpg.o -obj-$(CONFIG_ARCH_R8A7745) += r8a7745-cpg-mssr.o rcar-gen2-cpg.o -obj-$(CONFIG_ARCH_R8A7778) += clk-r8a7778.o -obj-$(CONFIG_ARCH_R8A7779) += clk-r8a7779.o -obj-$(CONFIG_ARCH_R8A7790) += clk-rcar-gen2.o clk-div6.o -obj-$(CONFIG_ARCH_R8A7791) += clk-rcar-gen2.o clk-div6.o -obj-$(CONFIG_ARCH_R8A7792) += clk-rcar-gen2.o -obj-$(CONFIG_ARCH_R8A7793) += clk-rcar-gen2.o clk-div6.o -obj-$(CONFIG_ARCH_R8A7794) += clk-rcar-gen2.o clk-div6.o -obj-$(CONFIG_ARCH_R8A7795) += r8a7795-cpg-mssr.o rcar-gen3-cpg.o -obj-$(CONFIG_ARCH_R8A7796) += r8a7796-cpg-mssr.o rcar-gen3-cpg.o -obj-$(CONFIG_ARCH_SH73A0) += clk-sh73a0.o clk-div6.o +# SoC +obj-$(CONFIG_CLK_EMEV2) += clk-emev2.o +obj-$(CONFIG_CLK_RZA1) += clk-rz.o +obj-$(CONFIG_CLK_R8A73A4) += clk-r8a73a4.o +obj-$(CONFIG_CLK_R8A7740) += clk-r8a7740.o +obj-$(CONFIG_CLK_R8A7743) += r8a7743-cpg-mssr.o +obj-$(CONFIG_CLK_R8A7745) += r8a7745-cpg-mssr.o +obj-$(CONFIG_CLK_R8A7778) += clk-r8a7778.o +obj-$(CONFIG_CLK_R8A7779) += clk-r8a7779.o +obj-$(CONFIG_CLK_R8A7795) += r8a7795-cpg-mssr.o +obj-$(CONFIG_CLK_R8A7796) += r8a7796-cpg-mssr.o +obj-$(CONFIG_CLK_SH73A0) += clk-sh73a0.o -obj-$(CONFIG_CLK_RENESAS_CPG_MSSR) += renesas-cpg-mssr.o clk-div6.o +# Family +obj-$(CONFIG_CLK_RCAR_GEN2) += clk-rcar-gen2.o +obj-$(CONFIG_CLK_RCAR_GEN2_CPG) += rcar-gen2-cpg.o +obj-$(CONFIG_CLK_RCAR_GEN3_CPG) += rcar-gen3-cpg.o + +# Generic +obj-$(CONFIG_CLK_RENESAS_CPG_MSSR) += renesas-cpg-mssr.o obj-$(CONFIG_CLK_RENESAS_CPG_MSTP) += clk-mstp.o +obj-$(CONFIG_CLK_RENESAS_DIV6) += clk-div6.o
drivers/clk/renesas/renesas-cpg-mssr.c +4 -4
@@ -627,25 +627,25 @@ static inline int cpg_mssr_reset_controller_register(struct cpg_mssr_priv *priv)static const struct of_device_id cpg_mssr_match[] = { -#ifdef CONFIG_ARCH_R8A7743 +#ifdef CONFIG_CLK_R8A7743 { .compatible ="renesas,r8a7743-cpg-mssr" , .data = &r8a7743_cpg_mssr_info, }, #endif -#ifdef CONFIG_ARCH_R8A7745 +#ifdef CONFIG_CLK_R8A7745 { .compatible ="renesas,r8a7745-cpg-mssr" , .data = &r8a7745_cpg_mssr_info, }, #endif -#ifdef CONFIG_ARCH_R8A7795 +#ifdef CONFIG_CLK_R8A7795 { .compatible ="renesas,r8a7795-cpg-mssr" , .data = &r8a7795_cpg_mssr_info, }, #endif -#ifdef CONFIG_ARCH_R8A7796 +#ifdef CONFIG_CLK_R8A7796 { .compatible ="renesas,r8a7796-cpg-mssr" , .data = &r8a7796_cpg_mssr_info,
Signature · 1 line
2.7.4
PATCH 1/2 clk: renesas: Rework Kconfig and Makefile logic
Quoted 22 lines · Geert Uytterhoeven
The goals are to:
- Allow precise control over and automatic selection of which (sub)drivers are used for which SoC (which may change in the future),
- Allow adding support for new SoCs easily,
- Allow compile-testing of all (sub)drivers,
- Keep driver selection logic in the subsystem-specificKconfigindependent from the architecture-specificKconfig(i.e. no "select" fromarch/arm64/Kconfig.platforms), to avoid dependencies.This is implemented by:
- IntroducingKconfigsymbols for all drivers and sub-drivers,
- Introducing theKconfigsymbolCLK_RENESAS, which is enabled automatically when building for a Renesas ARM platform, and which enables all required drivers without interaction of the user, based on SoC-specific ARCH_* symbols,
- Allowing the user to enable anyKconfigsymbol manually ifCOMPILE_TESTis enabled,
- Using the newKconfigsymbols instead of the ARCH_* symbols to control compilation in theMakefile,
- Always enteringdrivers/clk/renesas/during the build.
Quoted 2 lines
Signed-off-by Geert Uytterhoeven <[email protected]>---
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
Geert Uytterhoeven
maintainerPATCH 2/2 soc: renesas: Rework Kconfig and Makefile logic
In reply to Geert UytterhoevenThe goals are to:
- Allow precise control over and automatic selection of which (sub)drivers are used for which SoC,
- Allow adding support for new SoCs easily,
- Allow compile-testing of all (sub)drivers,
- Keep driver selection logic in the subsystem-specific Kconfig, independent from the architecture-specific Kconfig (i.e. no "select" from arch/arm64/Kconfig.platforms), to avoid dependencies.
This is implemented by:
- Introducing Kconfig symbols for all drivers and sub-drivers,
- Introducing the Kconfig symbol SOC_RENESAS, which is enabled automatically when building for a Renesas ARM platform, and which enables all required drivers without interaction of the user, based on SoC-specific ARCH_* symbols,
- Allowing the user to enable any Kconfig symbol manually if COMPILE_TEST is enabled,
- Using the new Kconfig symbols instead of the ARCH_* symbols to control compilation in the Makefile,
- Always entering drivers/soc/renesas/ during the build.
--- drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 2 +- drivers/soc/renesas/Kconfig | 63 ++++++++++++++++++++++++++++++++++++ drivers/soc/renesas/Makefile | 31 +++++++++--------- drivers/soc/renesas/rcar-sysc.c | 24 +++++++------- include/linux/soc/renesas/rcar-rst.h | 3 +- 6 files changed, 92 insertions(+), 32 deletions(-) create mode 100644 drivers/soc/renesas/Kconfig
drivers/soc/Kconfig +1 -0
@@ -4,6 +4,7 @@ source "drivers/soc/bcm/Kconfig" source "drivers/soc/fsl/Kconfig" source "drivers/soc/mediatek/Kconfig" source "drivers/soc/qcom/Kconfig" +source "drivers/soc/renesas/Kconfig" source "drivers/soc/rockchip/Kconfig" source "drivers/soc/samsung/Kconfig" source "drivers/soc/sunxi/Kconfig"
drivers/soc/Makefile +1 -1
@@ -8,7 +8,7 @@ obj-$(CONFIG_MACH_DOVE) += dove/ obj-y += fsl/ obj-$(CONFIG_ARCH_MEDIATEK) += mediatek/ obj-$(CONFIG_ARCH_QCOM) += qcom/ -obj-$(CONFIG_ARCH_RENESAS) += renesas/ +obj-y += renesas/ obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/ obj-$(CONFIG_SOC_SAMSUNG) += samsung/ obj-$(CONFIG_ARCH_SUNXI) += sunxi/
drivers/soc/renesas/Kconfig new file +63 -0
63 lines not on this page · raw message
drivers/soc/renesas/Makefile +15 -16
@@ -1,18 +1,17 @@ -obj-$(CONFIG_SOC_BUS) += renesas-soc.o +# Generic, must be first because of soc_device_register() +obj-$(CONFIG_SOC_RENESAS) += renesas-soc.o -obj-$(CONFIG_ARCH_RCAR_GEN1) += rcar-rst.o -obj-$(CONFIG_ARCH_RCAR_GEN2) += rcar-rst.o -obj-$(CONFIG_ARCH_R8A7795) += rcar-rst.o -obj-$(CONFIG_ARCH_R8A7796) += rcar-rst.o +# SoC +obj-$(CONFIG_SYSC_R8A7743) += r8a7743-sysc.o +obj-$(CONFIG_SYSC_R8A7745) += r8a7745-sysc.o +obj-$(CONFIG_SYSC_R8A7779) += r8a7779-sysc.o +obj-$(CONFIG_SYSC_R8A7790) += r8a7790-sysc.o +obj-$(CONFIG_SYSC_R8A7791) += r8a7791-sysc.o +obj-$(CONFIG_SYSC_R8A7792) += r8a7792-sysc.o +obj-$(CONFIG_SYSC_R8A7794) += r8a7794-sysc.o +obj-$(CONFIG_SYSC_R8A7795) += r8a7795-sysc.o +obj-$(CONFIG_SYSC_R8A7796) += r8a7796-sysc.o -obj-$(CONFIG_ARCH_R8A7743) += rcar-sysc.o r8a7743-sysc.o -obj-$(CONFIG_ARCH_R8A7745) += rcar-sysc.o r8a7745-sysc.o -obj-$(CONFIG_ARCH_R8A7779) += rcar-sysc.o r8a7779-sysc.o -obj-$(CONFIG_ARCH_R8A7790) += rcar-sysc.o r8a7790-sysc.o -obj-$(CONFIG_ARCH_R8A7791) += rcar-sysc.o r8a7791-sysc.o -obj-$(CONFIG_ARCH_R8A7792) += rcar-sysc.o r8a7792-sysc.o -# R-Car M2-N is identical to R-Car M2-W w.r.t. power domains. -obj-$(CONFIG_ARCH_R8A7793) += rcar-sysc.o r8a7791-sysc.o -obj-$(CONFIG_ARCH_R8A7794) += rcar-sysc.o r8a7794-sysc.o -obj-$(CONFIG_ARCH_R8A7795) += rcar-sysc.o r8a7795-sysc.o -obj-$(CONFIG_ARCH_R8A7796) += rcar-sysc.o r8a7796-sysc.o +# Family +obj-$(CONFIG_RST_RCAR) += rcar-rst.o +obj-$(CONFIG_SYSC_RCAR) += rcar-sysc.o
drivers/soc/renesas/rcar-sysc.c +11 -13
@@ -275,35 +275,33 @@ static void __init rcar_sysc_pd_setup(struct rcar_sysc_pd *pd) }static const struct of_device_id rcar_sysc_matches[] = { -#ifdef CONFIG_ARCH_R8A7743 +#ifdef CONFIG_SYSC_R8A7743 { .compatible ="renesas,r8a7743-sysc" , .data = &r8a7743_sysc_info }, #endif -#ifdef CONFIG_ARCH_R8A7745 +#ifdef CONFIG_SYSC_R8A7745 { .compatible ="renesas,r8a7745-sysc" , .data = &r8a7745_sysc_info }, #endif -#ifdef CONFIG_ARCH_R8A7779 +#ifdef CONFIG_SYSC_R8A7779 { .compatible ="renesas,r8a7779-sysc" , .data = &r8a7779_sysc_info }, #endif -#ifdef CONFIG_ARCH_R8A7790 +#ifdef CONFIG_SYSC_R8A7790 { .compatible ="renesas,r8a7790-sysc" , .data = &r8a7790_sysc_info }, #endif -#ifdef CONFIG_ARCH_R8A7791 +#ifdef CONFIG_SYSC_R8A7791 { .compatible ="renesas,r8a7791-sysc" , .data = &r8a7791_sysc_info }, -#endif -#ifdef CONFIG_ARCH_R8A7792 - { .compatible ="renesas,r8a7792-sysc" , .data = &r8a7792_sysc_info }, -#endif -#ifdef CONFIG_ARCH_R8A7793/* R-Car M2-N is identical to R-Car M2-W w.r.t. power domains. */ { .compatible ="renesas,r8a7793-sysc" , .data = &r8a7791_sysc_info }, #endif -#ifdef CONFIG_ARCH_R8A7794 +#ifdef CONFIG_SYSC_R8A7792 + { .compatible ="renesas,r8a7792-sysc" , .data = &r8a7792_sysc_info }, +#endif +#ifdef CONFIG_SYSC_R8A7794 { .compatible ="renesas,r8a7794-sysc" , .data = &r8a7794_sysc_info }, #endif -#ifdef CONFIG_ARCH_R8A7795 +#ifdef CONFIG_SYSC_R8A7795 { .compatible ="renesas,r8a7795-sysc" , .data = &r8a7795_sysc_info }, #endif -#ifdef CONFIG_ARCH_R8A7796 +#ifdef CONFIG_SYSC_R8A7796 { .compatible ="renesas,r8a7796-sysc" , .data = &r8a7796_sysc_info }, #endif {/* sentinel */ }
include/linux/soc/renesas/rcar-rst.h +1 -2
@@ -1,8 +1,7 @@#ifndef __LINUX_SOC_RENESAS_RCAR_RST_H__#define __LINUX_SOC_RENESAS_RCAR_RST_H__ -#if defined(CONFIG_ARCH_RCAR_GEN1 ) || defined(CONFIG_ARCH_RCAR_GEN2 ) || \ - defined(CONFIG_ARCH_R8A7795 ) || defined(CONFIG_ARCH_R8A7796 ) +#ifdef CONFIG_RST_RCAR int rcar_rst_read_mode_pins (u32 *mode);#else static inline int rcar_rst_read_mode_pins (u32 *mode) {return -ENODEV ; }
Signature · 1 line
2.7.4
cover clk / soc: renesas: Rework Kconfig and Makefile logic
In reply to Geert UytterhoevenQuoted 27 lines · Geert Uytterhoeven
Hi all,
This RFC patch series reworks the
KconfigandMakefilelogic for the Renesas clock and SoC drivers. It was sparked by a discussion with Olof about the Renesas clock driver dependencies.The goals are to:
- Allow precise control over and automatic selection of which (sub)drivers are used for which SoC (which may change in the future),
- Allow adding support for new SoCs easily,
- Allow compile-testing of all (sub)drivers,
- Keep driver selection logic in the subsystem-specificKconfigindependent from the architecture-specificKconfig(i.e. no "select" fromarch/arm64/Kconfig.platforms), to avoid dependencies.The series can't be applied as-is, because compile-testing all drivers depends on independent fixes, some in other subsystems.
More details are provided in the individual patch descriptions.
For testing, this patch series, plus several fixes to allow more compile-testing, are available in the topic/clk-soc-renesas-Kconfig-rework branch of my renesas-drivers git repository at
git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git.
Quoted 4 lines
This has been tested on R-Car Gen2 and Gen3, and compile-tested for various other configurations.
Thanks for your comments!
Hi Geert,
thanks for working on this. I am very pleased to see something that is more robust with regards to adding new platforms without causing build breakage - I have been burnt by this several times.