linux-clk.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
@ 2021-09-20 19:03 Will McVicker
  2021-09-20 19:03 ` [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic Will McVicker
                   ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Will McVicker @ 2021-09-20 19:03 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Sylwester Nawrocki, Tomasz Figa,
	Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Krzysztof Kozlowski, Linus Walleij, Alessandro Zummo,
	Alexandre Belloni
  Cc: Lee Jones, Will McVicker, kernel-team, linux-arm-kernel,
	linux-kernel, linux-samsung-soc, linux-clk, linux-gpio,
	linux-rtc

This patch series tries to address the issue of ARCH_EXYNOS force selecting
a handful of drivers without allowing the vendor to override any of the
default configs. This takes away from the flexibilty of compiling a generic
kernel with exynos kernel modules. For example, it doesn't allow vendors to
modularize these drivers out of the core kernel in order to share a generic
kernel image across multiple devices that require device-specific kernel
modules.

To address this without impacting the existing behavior, this series
switches the default config logic for the offending configs to use "default
y if ARCH_EXYNOS" versus having ARCH_EXYNOS directly select them. I have
verified that these patches do not impact the default aarch64 .config.

Will McVicker (4):
  clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  soc: samsung: change SOC_SAMSUNG default config logic
  pinctrl: samsung: change PINCTRL_EXYNOS default config logic
  rtc: change HAVE_S3C_RTC default config logic

 arch/arm64/Kconfig.platforms    | 7 -------
 drivers/clk/samsung/Kconfig     | 1 +
 drivers/pinctrl/samsung/Kconfig | 1 +
 drivers/rtc/Kconfig             | 1 +
 drivers/soc/samsung/Kconfig     | 4 ++++
 5 files changed, 7 insertions(+), 7 deletions(-)

-- 
2.33.0.464.g1972c5931b-goog


^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-20 19:03 [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs Will McVicker
@ 2021-09-20 19:03 ` Will McVicker
  2021-09-21  7:29   ` Krzysztof Kozlowski
  2021-09-21  7:08 ` [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs Lee Jones
  2021-09-21  7:19 ` Krzysztof Kozlowski
  2 siblings, 1 reply; 23+ messages in thread
From: Will McVicker @ 2021-09-20 19:03 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Sylwester Nawrocki, Tomasz Figa,
	Chanwoo Choi, Michael Turquette, Stephen Boyd
  Cc: Lee Jones, Will McVicker, kernel-team, linux-arm-kernel,
	linux-kernel, linux-samsung-soc, linux-clk

COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
"default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
or modularize this driver.

I verified the .config is identical with and without this change.

Signed-off-by: Will McVicker <willmcvicker@google.com>
---
 arch/arm64/Kconfig.platforms | 1 -
 drivers/clk/samsung/Kconfig  | 1 +
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
index b0ce18d4cc98..3a66ed43088d 100644
--- a/arch/arm64/Kconfig.platforms
+++ b/arch/arm64/Kconfig.platforms
@@ -91,7 +91,6 @@ config ARCH_BRCMSTB
 
 config ARCH_EXYNOS
 	bool "ARMv8 based Samsung Exynos SoC family"
-	select COMMON_CLK_SAMSUNG
 	select EXYNOS_CHIPID
 	select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS
 	select EXYNOS_PMU
diff --git a/drivers/clk/samsung/Kconfig b/drivers/clk/samsung/Kconfig
index 0441c4f73ac9..f3e189a06b03 100644
--- a/drivers/clk/samsung/Kconfig
+++ b/drivers/clk/samsung/Kconfig
@@ -2,6 +2,7 @@
 # Recent Exynos platforms should just select COMMON_CLK_SAMSUNG:
 config COMMON_CLK_SAMSUNG
 	bool "Samsung Exynos clock controller support" if COMPILE_TEST
+	default y if ARCH_EXYNOS
 	select S3C64XX_COMMON_CLK if ARM && ARCH_S3C64XX
 	select S5PV210_COMMON_CLK if ARM && ARCH_S5PV210
 	select EXYNOS_3250_COMMON_CLK if ARM && SOC_EXYNOS3250
-- 
2.33.0.464.g1972c5931b-goog


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-20 19:03 [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs Will McVicker
  2021-09-20 19:03 ` [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic Will McVicker
@ 2021-09-21  7:08 ` Lee Jones
  2021-09-21  7:19 ` Krzysztof Kozlowski
  2 siblings, 0 replies; 23+ messages in thread
From: Lee Jones @ 2021-09-21  7:08 UTC (permalink / raw)
  To: Will McVicker
  Cc: Catalin Marinas, Will Deacon, Sylwester Nawrocki, Tomasz Figa,
	Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Krzysztof Kozlowski, Linus Walleij, Alessandro Zummo,
	Alexandre Belloni, kernel-team, linux-arm-kernel, linux-kernel,
	linux-samsung-soc, linux-clk, linux-gpio, linux-rtc

On Mon, 20 Sep 2021, Will McVicker wrote:

> This patch series tries to address the issue of ARCH_EXYNOS force selecting
> a handful of drivers without allowing the vendor to override any of the
> default configs. This takes away from the flexibilty of compiling a generic
> kernel with exynos kernel modules. For example, it doesn't allow vendors to
> modularize these drivers out of the core kernel in order to share a generic
> kernel image across multiple devices that require device-specific kernel
> modules.
> 
> To address this without impacting the existing behavior, this series
> switches the default config logic for the offending configs to use "default
> y if ARCH_EXYNOS" versus having ARCH_EXYNOS directly select them. I have
> verified that these patches do not impact the default aarch64 .config.
> 
> Will McVicker (4):
>   clk: samsung: change COMMON_CLK_SAMSUNG default config logic
>   soc: samsung: change SOC_SAMSUNG default config logic
>   pinctrl: samsung: change PINCTRL_EXYNOS default config logic
>   rtc: change HAVE_S3C_RTC default config logic
> 
>  arch/arm64/Kconfig.platforms    | 7 -------
>  drivers/clk/samsung/Kconfig     | 1 +
>  drivers/pinctrl/samsung/Kconfig | 1 +
>  drivers/rtc/Kconfig             | 1 +
>  drivers/soc/samsung/Kconfig     | 4 ++++
>  5 files changed, 7 insertions(+), 7 deletions(-)

For all patches in the series:

Reviewed-by: Lee Jones <lee.jones@linaro.org>

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-20 19:03 [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs Will McVicker
  2021-09-20 19:03 ` [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic Will McVicker
  2021-09-21  7:08 ` [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs Lee Jones
@ 2021-09-21  7:19 ` Krzysztof Kozlowski
  2021-09-21  7:22   ` Krzysztof Kozlowski
  2021-09-21  8:11   ` Lee Jones
  2 siblings, 2 replies; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-21  7:19 UTC (permalink / raw)
  To: Will McVicker, Catalin Marinas, Will Deacon, Sylwester Nawrocki,
	Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Linus Walleij, Alessandro Zummo, Alexandre Belloni
  Cc: Lee Jones, kernel-team, linux-arm-kernel, linux-kernel,
	linux-samsung-soc, linux-clk, linux-gpio, linux-rtc

On 20/09/2021 21:03, Will McVicker wrote:
> This patch series tries to address the issue of ARCH_EXYNOS force selecting
> a handful of drivers without allowing the vendor to override any of the
> default configs. This takes away from the flexibilty of compiling a generic
> kernel with exynos kernel modules. For example, it doesn't allow vendors to
> modularize these drivers out of the core kernel in order to share a generic
> kernel image across multiple devices that require device-specific kernel
> modules.

You do not address the issue in these patches. The problem you describe
is that drivers are not modules and you are not changing them into modules.

> 
> To address this without impacting the existing behavior, this series
> switches the default config logic for the offending configs to use "default
> y if ARCH_EXYNOS" versus having ARCH_EXYNOS directly select them. I have
> verified that these patches do not impact the default aarch64 .config.

Yep, this is what you did but it does not match the described problem.
You are not solving it but doing something else.

> 
> Will McVicker (4):
>   clk: samsung: change COMMON_CLK_SAMSUNG default config logic
>   soc: samsung: change SOC_SAMSUNG default config logic
>   pinctrl: samsung: change PINCTRL_EXYNOS default config logic
>   rtc: change HAVE_S3C_RTC default config logic
> 


I received only two patches from this set. Please resend following
get_maintainers.pl script.


Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-21  7:19 ` Krzysztof Kozlowski
@ 2021-09-21  7:22   ` Krzysztof Kozlowski
  2021-09-21  8:11   ` Lee Jones
  1 sibling, 0 replies; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-21  7:22 UTC (permalink / raw)
  To: Will McVicker, Catalin Marinas, Will Deacon, Sylwester Nawrocki,
	Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Linus Walleij, Alessandro Zummo, Alexandre Belloni
  Cc: Lee Jones, kernel-team, linux-arm-kernel, linux-kernel,
	linux-samsung-soc, linux-clk, linux-gpio, linux-rtc

On 21/09/2021 09:19, Krzysztof Kozlowski wrote:
> On 20/09/2021 21:03, Will McVicker wrote:
>> This patch series tries to address the issue of ARCH_EXYNOS force selecting
>> a handful of drivers without allowing the vendor to override any of the
>> default configs. This takes away from the flexibilty of compiling a generic
>> kernel with exynos kernel modules. For example, it doesn't allow vendors to
>> modularize these drivers out of the core kernel in order to share a generic
>> kernel image across multiple devices that require device-specific kernel
>> modules.
> 
> You do not address the issue in these patches. The problem you describe
> is that drivers are not modules and you are not changing them into modules.
> 
>>
>> To address this without impacting the existing behavior, this series
>> switches the default config logic for the offending configs to use "default
>> y if ARCH_EXYNOS" versus having ARCH_EXYNOS directly select them. I have
>> verified that these patches do not impact the default aarch64 .config.
> 
> Yep, this is what you did but it does not match the described problem.
> You are not solving it but doing something else.
> 
>>
>> Will McVicker (4):
>>   clk: samsung: change COMMON_CLK_SAMSUNG default config logic
>>   soc: samsung: change SOC_SAMSUNG default config logic
>>   pinctrl: samsung: change PINCTRL_EXYNOS default config logic
>>   rtc: change HAVE_S3C_RTC default config logic
>>
> 
> 
> I received only two patches from this set. Please resend following
> get_maintainers.pl script.

For the record - samsung-soc list also did not get all your patches.

NAK, please use get_maintainers.pl.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-20 19:03 ` [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic Will McVicker
@ 2021-09-21  7:29   ` Krzysztof Kozlowski
  2021-09-21  7:50     ` Geert Uytterhoeven
  0 siblings, 1 reply; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-21  7:29 UTC (permalink / raw)
  To: Will McVicker, Catalin Marinas, Will Deacon, Sylwester Nawrocki,
	Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd
  Cc: Lee Jones, kernel-team, linux-arm-kernel, linux-kernel,
	linux-samsung-soc, linux-clk

On 20/09/2021 21:03, Will McVicker wrote:
> COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
> to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
> "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
> or modularize this driver.

The clock drivers are essential, you cannot disable them for a generic
kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms.

> 
> I verified the .config is identical with and without this change.
> 
> Signed-off-by: Will McVicker <willmcvicker@google.com>
> ---
>  arch/arm64/Kconfig.platforms | 1 -
>  drivers/clk/samsung/Kconfig  | 1 +
>  2 files changed, 1 insertion(+), 1 deletion(-)
> 

NAK, please use get_maintainers.pl to Cc necessary folks.



Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-21  7:29   ` Krzysztof Kozlowski
@ 2021-09-21  7:50     ` Geert Uytterhoeven
  2021-09-21  8:35       ` Krzysztof Kozlowski
  0 siblings, 1 reply; 23+ messages in thread
From: Geert Uytterhoeven @ 2021-09-21  7:50 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Will McVicker, Catalin Marinas, Will Deacon, Sylwester Nawrocki,
	Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Lee Jones, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On Tue, Sep 21, 2021 at 9:31 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> On 20/09/2021 21:03, Will McVicker wrote:
> > COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
> > to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
> > "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
> > or modularize this driver.
>
> The clock drivers are essential, you cannot disable them for a generic
> kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms.

Obviously it's not gonna work if the clock driver is not enabled
at all.  But does it work if you make the clock driver modular, and
put it with all other essential driver modules in initramfs?  Debugging
would be hard, as the serial console driver also relies on clocks
and PM Domains etc.

If not, this patch should be NAKed, until it works with a modular
clock driver.

If yes, perhaps another line should be added (_before_ the other line)?

  + default m if ARCH_EXYNOS && MODULES
    default y if ARCH_EXYNOS

However, many developers may want MODULES=y, but not want to bother
with an initramfs.  So perhaps we need a new symbol
MINIMUM_GENERIC_KERNEL or so, protected by EXPERT, and make the
driver default to m if that is enabled?

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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 Torvalds

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-21  7:19 ` Krzysztof Kozlowski
  2021-09-21  7:22   ` Krzysztof Kozlowski
@ 2021-09-21  8:11   ` Lee Jones
  2021-09-21  8:25     ` Krzysztof Kozlowski
  1 sibling, 1 reply; 23+ messages in thread
From: Lee Jones @ 2021-09-21  8:11 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Will McVicker, Catalin Marinas, Will Deacon, Sylwester Nawrocki,
	Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Linus Walleij, Alessandro Zummo, Alexandre Belloni, kernel-team,
	linux-arm-kernel, linux-kernel, linux-samsung-soc, linux-clk,
	linux-gpio, linux-rtc

On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:

> On 20/09/2021 21:03, Will McVicker wrote:
> > This patch series tries to address the issue of ARCH_EXYNOS force selecting
> > a handful of drivers without allowing the vendor to override any of the
> > default configs. This takes away from the flexibilty of compiling a generic
> > kernel with exynos kernel modules. For example, it doesn't allow vendors to
> > modularize these drivers out of the core kernel in order to share a generic
> > kernel image across multiple devices that require device-specific kernel
> > modules.
> 
> You do not address the issue in these patches. The problem you describe
> is that drivers are not modules and you are not changing them into modules.

The wording is unfortunate.  The reason for this change doesn't have
much to do with kernel modules.

Let's go back in time 18 months or so when Greg KH submitted this [0]
patch, which you Acked.  Greg was trying to solve the problem of not
having to enable ARCH_EXYNOS on kernels which are designed to be
platform agnostic (sometimes called Generic Kernels).  For some reason
SERIAL_SAMSUNG is the only symbol with these dependencies, so the
solution seemed simple and straight forward at the time.

However, For sound reasons Geert NACKed the patch.

Quoting from [1] he says:

  "A generic kernel will include Samsung SoC support, hence
  PLAT_SAMSUNG or ARCH_EXYNOS will be enabled."

However, since the entry for ARCH_EXYNOS *insists* on building-in a
bunch of other symbols (via 'select') which will be unused in most
cases, this is not a currently acceptable approach for many Generic
Kernels due to size constraints.

What this patch does is migrates those symbols from being 'select'ed
(always built-in with no recourse) to 'default y'.  Where the former
cannot be over-ridden, but the latter can be via a vendor's
defconfig/fragment.

I doubt many (any?) of these symbols can be converted to kernel
modules anyway, as they are required very early on in the boot
sequence.

> > To address this without impacting the existing behavior, this series
> > switches the default config logic for the offending configs to use "default
> > y if ARCH_EXYNOS" versus having ARCH_EXYNOS directly select them. I have
> > verified that these patches do not impact the default aarch64 .config.
> 
> Yep, this is what you did but it does not match the described problem.
> You are not solving it but doing something else.
> 
> > Will McVicker (4):
> >   clk: samsung: change COMMON_CLK_SAMSUNG default config logic
> >   soc: samsung: change SOC_SAMSUNG default config logic
> >   pinctrl: samsung: change PINCTRL_EXYNOS default config logic
> >   rtc: change HAVE_S3C_RTC default config logic

[0] https://lore.kernel.org/lkml/20200220102628.3371996-1-gregkh@linuxfoundation.org/
[1] https://lore.kernel.org/lkml/CAMuHMdVrVe37JyUNFSf9KRZTcndrvDaZvrVoBxzm_7J2nhg1kg@mail.gmail.com/

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-21  8:11   ` Lee Jones
@ 2021-09-21  8:25     ` Krzysztof Kozlowski
  2021-09-21  8:41       ` Lee Jones
  2021-09-25  2:17       ` Saravana Kannan
  0 siblings, 2 replies; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-21  8:25 UTC (permalink / raw)
  To: Lee Jones
  Cc: Will McVicker, Catalin Marinas, Will Deacon, Sylwester Nawrocki,
	Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Linus Walleij, Alessandro Zummo, Alexandre Belloni, kernel-team,
	linux-arm-kernel, linux-kernel, linux-samsung-soc, linux-clk,
	linux-gpio, linux-rtc

On 21/09/2021 10:11, Lee Jones wrote:
> On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
> 
>> On 20/09/2021 21:03, Will McVicker wrote:
>>> This patch series tries to address the issue of ARCH_EXYNOS force selecting
>>> a handful of drivers without allowing the vendor to override any of the
>>> default configs. This takes away from the flexibilty of compiling a generic
>>> kernel with exynos kernel modules. For example, it doesn't allow vendors to
>>> modularize these drivers out of the core kernel in order to share a generic
>>> kernel image across multiple devices that require device-specific kernel
>>> modules.
>>
>> You do not address the issue in these patches. The problem you describe
>> is that drivers are not modules and you are not changing them into modules.
> 
> The wording is unfortunate.  The reason for this change doesn't have
> much to do with kernel modules.
> 
> Let's go back in time 18 months or so when Greg KH submitted this [0]
> patch, which you Acked.  Greg was trying to solve the problem of not
> having to enable ARCH_EXYNOS on kernels which are designed to be
> platform agnostic (sometimes called Generic Kernels).  For some reason
> SERIAL_SAMSUNG is the only symbol with these dependencies, so the
> solution seemed simple and straight forward at the time.
> 
> However, For sound reasons Geert NACKed the patch.
> 
> Quoting from [1] he says:
> 
>   "A generic kernel will include Samsung SoC support, hence
>   PLAT_SAMSUNG or ARCH_EXYNOS will be enabled."

Yes, it's correct reasoning. There is also one more use-case -
non-upstreamed (out of tree) platform which wants to use Exynos-specific
drivers. Something like was happening with Apple M1 except that it got
upstreamed and we do not care much about out-of-tree.

> 
> However, since the entry for ARCH_EXYNOS *insists* on building-in a
> bunch of other symbols (via 'select') which will be unused in most
> cases, this is not a currently acceptable approach for many Generic
> Kernels due to size constraints.

In the mainline kernel there is no such use case. If you want to have
Exynos-whatever-driver (e.g. SERIAL_SAMSUNG or S3C RTC), you should
select ARCH_EXYNOS because otherwise it does not make any sense. Zero
sense. Such kernel won't work.

It makes sense only if there is some other work, hidden here, where
someone might want to have SERIAL_SAMSUNG or S3C RTC without
ARCH_EXYNOS. Although GKI is not that work because GKI kernel will
select ARCH_EXYNOS. It must select ARCH_EXYNOS if it wants to support
Exynos platforms.

Therefore I expect first to bring this "some other work, hidden here" to
broader audience, so we can review its use case.

> 
> What this patch does is migrates those symbols from being 'select'ed
> (always built-in with no recourse) to 'default y'.  Where the former
> cannot be over-ridden, but the latter can be via a vendor's
> defconfig/fragment.

It cannot be overridden by vendor fragment because options are not
visible. You cannot change them.

The patch does nothing in this regard (making them selectable/possible
to disable), which is why I complained.

> 
> I doubt many (any?) of these symbols can be converted to kernel
> modules anyway, as they are required very early on in the boot
> sequence.

True, some could, some not. Also some platforms are set up via
bootloader, so actually could "survive" till module is loaded from some
initrd.


Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-21  7:50     ` Geert Uytterhoeven
@ 2021-09-21  8:35       ` Krzysztof Kozlowski
  2021-09-21 17:58         ` Will McVicker
  0 siblings, 1 reply; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-21  8:35 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Will McVicker, Catalin Marinas, Will Deacon, Sylwester Nawrocki,
	Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Lee Jones, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On 21/09/2021 09:50, Geert Uytterhoeven wrote:
> On Tue, Sep 21, 2021 at 9:31 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>> On 20/09/2021 21:03, Will McVicker wrote:
>>> COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
>>> to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
>>> "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
>>> or modularize this driver.
>>
>> The clock drivers are essential, you cannot disable them for a generic
>> kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms.
> 
> Obviously it's not gonna work if the clock driver is not enabled
> at all.  But does it work if you make the clock driver modular, and
> put it with all other essential driver modules in initramfs?  Debugging
> would be hard, as the serial console driver also relies on clocks
> and PM Domains etc.

The kernel could boot without clock drivers (default settings from
bootloader), probe clocks from initramfs and proceed with rootfs from
eMMC/SD/net.

In theory.

However I have no reports that it ever worked. If there is such working
upstream configuration, I don't mind here. Just please explain this in
the commit msg.

> 
> If not, this patch should be NAKed, until it works with a modular
> clock driver.
> 
> If yes, perhaps another line should be added (_before_ the other line)?
> 
>   + default m if ARCH_EXYNOS && MODULES
>     default y if ARCH_EXYNOS
> 
> However, many developers may want MODULES=y, but not want to bother
> with an initramfs.  So perhaps we need a new symbol
> MINIMUM_GENERIC_KERNEL or so, protected by EXPERT, and make the
> driver default to m if that is enabled?

Yeah, that's indeed a problem to solve. For most users (and distros)
building kernel for Exynos this should be built-in by default.

Anyway, the option is non-selectable so it cannot be converted to "m" or
disabled. And this is claimed in the commit msg:
"provide flexibilty for vendors to disable or modularize this driver."

The commit does not achieve it.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-21  8:25     ` Krzysztof Kozlowski
@ 2021-09-21  8:41       ` Lee Jones
  2021-09-25  2:17       ` Saravana Kannan
  1 sibling, 0 replies; 23+ messages in thread
From: Lee Jones @ 2021-09-21  8:41 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Will McVicker, Catalin Marinas, Will Deacon, Sylwester Nawrocki,
	Tomasz Figa, Chanwoo Choi, Michael Turquette, Stephen Boyd,
	Linus Walleij, Alessandro Zummo, Alexandre Belloni, kernel-team,
	linux-arm-kernel, linux-kernel, linux-samsung-soc, linux-clk,
	linux-gpio, linux-rtc

On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:

> On 21/09/2021 10:11, Lee Jones wrote:
> > On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
> > 
> >> On 20/09/2021 21:03, Will McVicker wrote:
> >>> This patch series tries to address the issue of ARCH_EXYNOS force selecting
> >>> a handful of drivers without allowing the vendor to override any of the
> >>> default configs. This takes away from the flexibilty of compiling a generic
> >>> kernel with exynos kernel modules. For example, it doesn't allow vendors to
> >>> modularize these drivers out of the core kernel in order to share a generic
> >>> kernel image across multiple devices that require device-specific kernel
> >>> modules.
> >>
> >> You do not address the issue in these patches. The problem you describe
> >> is that drivers are not modules and you are not changing them into modules.
> > 
> > The wording is unfortunate.  The reason for this change doesn't have
> > much to do with kernel modules.
> > 
> > Let's go back in time 18 months or so when Greg KH submitted this [0]
> > patch, which you Acked.  Greg was trying to solve the problem of not
> > having to enable ARCH_EXYNOS on kernels which are designed to be
> > platform agnostic (sometimes called Generic Kernels).  For some reason
> > SERIAL_SAMSUNG is the only symbol with these dependencies, so the
> > solution seemed simple and straight forward at the time.
> > 
> > However, For sound reasons Geert NACKed the patch.
> > 
> > Quoting from [1] he says:
> > 
> >   "A generic kernel will include Samsung SoC support, hence
> >   PLAT_SAMSUNG or ARCH_EXYNOS will be enabled."
> 
> Yes, it's correct reasoning. There is also one more use-case -
> non-upstreamed (out of tree) platform which wants to use Exynos-specific
> drivers. Something like was happening with Apple M1 except that it got
> upstreamed and we do not care much about out-of-tree.
> 
> > However, since the entry for ARCH_EXYNOS *insists* on building-in a
> > bunch of other symbols (via 'select') which will be unused in most
> > cases, this is not a currently acceptable approach for many Generic
> > Kernels due to size constraints.
> 
> In the mainline kernel there is no such use case. If you want to have
> Exynos-whatever-driver (e.g. SERIAL_SAMSUNG or S3C RTC), you should
> select ARCH_EXYNOS because otherwise it does not make any sense. Zero
> sense. Such kernel won't work.
> 
> It makes sense only if there is some other work, hidden here, where
> someone might want to have SERIAL_SAMSUNG or S3C RTC without
> ARCH_EXYNOS. Although GKI is not that work because GKI kernel will
> select ARCH_EXYNOS. It must select ARCH_EXYNOS if it wants to support
> Exynos platforms.
> 
> Therefore I expect first to bring this "some other work, hidden here" to
> broader audience, so we can review its use case.

AFAIA, there really isn't any GKI specific code.  Everything that can
be upstreamed, is upstreamed.  The delta consists of some vendor
over-rides (implemented using trace events/hooks spread out over the
code-base), lots of function exports (non-upstreamable due to no
upstream user) and some defconfig/fragments.  There really is nothing
else to share/upstream/unhide.

The only thing GKI needs is a little Kconfig flexibility above what is
currently offered.

> > What this patch does is migrates those symbols from being 'select'ed
> > (always built-in with no recourse) to 'default y'.  Where the former
> > cannot be over-ridden, but the latter can be via a vendor's
> > defconfig/fragment.
> 
> It cannot be overridden by vendor fragment because options are not
> visible. You cannot change them.
> 
> The patch does nothing in this regard (making them selectable/possible
> to disable), which is why I complained.

100% agree.  As I commented in the other patch, this was a good point
that should be addressed 

> > I doubt many (any?) of these symbols can be converted to kernel
> > modules anyway, as they are required very early on in the boot
> > sequence.
> 
> True, some could, some not. Also some platforms are set up via
> bootloader, so actually could "survive" till module is loaded from some
> initrd.

If these could be turned into modules, that would be even better!

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-21  8:35       ` Krzysztof Kozlowski
@ 2021-09-21 17:58         ` Will McVicker
  2021-09-21 18:04           ` Krzysztof Kozlowski
  0 siblings, 1 reply; 23+ messages in thread
From: Will McVicker @ 2021-09-21 17:58 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Geert Uytterhoeven, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Lee Jones, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On Tue, Sep 21, 2021 at 1:35 AM Krzysztof Kozlowski
<krzysztof.kozlowski@canonical.com> wrote:
>
> On 21/09/2021 09:50, Geert Uytterhoeven wrote:
> > On Tue, Sep 21, 2021 at 9:31 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> >> On 20/09/2021 21:03, Will McVicker wrote:
> >>> COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
> >>> to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
> >>> "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
> >>> or modularize this driver.
> >>
> >> The clock drivers are essential, you cannot disable them for a generic
> >> kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms.
> >
> > Obviously it's not gonna work if the clock driver is not enabled
> > at all.  But does it work if you make the clock driver modular, and
> > put it with all other essential driver modules in initramfs?  Debugging
> > would be hard, as the serial console driver also relies on clocks
> > and PM Domains etc.
>
> The kernel could boot without clock drivers (default settings from
> bootloader), probe clocks from initramfs and proceed with rootfs from
> eMMC/SD/net.
>
> In theory.
>
> However I have no reports that it ever worked. If there is such working
> upstream configuration, I don't mind here. Just please explain this in
> the commit msg.
>
> >
> > If not, this patch should be NAKed, until it works with a modular
> > clock driver.
> >
> > If yes, perhaps another line should be added (_before_ the other line)?
> >
> >   + default m if ARCH_EXYNOS && MODULES
> >     default y if ARCH_EXYNOS
> >
> > However, many developers may want MODULES=y, but not want to bother
> > with an initramfs.  So perhaps we need a new symbol
> > MINIMUM_GENERIC_KERNEL or so, protected by EXPERT, and make the
> > driver default to m if that is enabled?
>
> Yeah, that's indeed a problem to solve. For most users (and distros)
> building kernel for Exynos this should be built-in by default.
>
> Anyway, the option is non-selectable so it cannot be converted to "m" or
> disabled. And this is claimed in the commit msg:
> "provide flexibilty for vendors to disable or modularize this driver."
>
> The commit does not achieve it.
>
> Best regards,
> Krzysztof

Thanks for the reviews! As Lee has explained in his replies, the
intent of this series is to provide config flexibility to create a
defconfig that allows us to move out SoC specific drivers in order to
create a generic kernel that can be used across multiple devices with
different SoCs. I'm sorry I added confusion by mentioning
modularization. All of these drivers that I am modifying in this
series can be modularized which is an ongoing effort, but is not
addressed here and I don't believe that modularizing them should be a
requirement before supporting enabling/disabling them.

I will update the series with my patch that refactors the Samsung SoC
drivers menuconfig to make these visible as well.

Thanks,
Will

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-21 17:58         ` Will McVicker
@ 2021-09-21 18:04           ` Krzysztof Kozlowski
  2021-09-23 12:57             ` Lee Jones
  0 siblings, 1 reply; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-21 18:04 UTC (permalink / raw)
  To: Will McVicker
  Cc: Geert Uytterhoeven, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Lee Jones, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On 21/09/2021 19:58, Will McVicker wrote:
> On Tue, Sep 21, 2021 at 1:35 AM Krzysztof Kozlowski
> <krzysztof.kozlowski@canonical.com> wrote:
>>
>> On 21/09/2021 09:50, Geert Uytterhoeven wrote:
>>> On Tue, Sep 21, 2021 at 9:31 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>>>> On 20/09/2021 21:03, Will McVicker wrote:
>>>>> COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
>>>>> to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
>>>>> "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
>>>>> or modularize this driver.
>>>>
>>>> The clock drivers are essential, you cannot disable them for a generic
>>>> kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms.
>>>
>>> Obviously it's not gonna work if the clock driver is not enabled
>>> at all.  But does it work if you make the clock driver modular, and
>>> put it with all other essential driver modules in initramfs?  Debugging
>>> would be hard, as the serial console driver also relies on clocks
>>> and PM Domains etc.
>>
>> The kernel could boot without clock drivers (default settings from
>> bootloader), probe clocks from initramfs and proceed with rootfs from
>> eMMC/SD/net.
>>
>> In theory.
>>
>> However I have no reports that it ever worked. If there is such working
>> upstream configuration, I don't mind here. Just please explain this in
>> the commit msg.
>>
>>>
>>> If not, this patch should be NAKed, until it works with a modular
>>> clock driver.
>>>
>>> If yes, perhaps another line should be added (_before_ the other line)?
>>>
>>>   + default m if ARCH_EXYNOS && MODULES
>>>     default y if ARCH_EXYNOS
>>>
>>> However, many developers may want MODULES=y, but not want to bother
>>> with an initramfs.  So perhaps we need a new symbol
>>> MINIMUM_GENERIC_KERNEL or so, protected by EXPERT, and make the
>>> driver default to m if that is enabled?
>>
>> Yeah, that's indeed a problem to solve. For most users (and distros)
>> building kernel for Exynos this should be built-in by default.
>>
>> Anyway, the option is non-selectable so it cannot be converted to "m" or
>> disabled. And this is claimed in the commit msg:
>> "provide flexibilty for vendors to disable or modularize this driver."
>>
>> The commit does not achieve it.
>>
>> Best regards,
>> Krzysztof
> 
> Thanks for the reviews! As Lee has explained in his replies, the
> intent of this series is to provide config flexibility to create a
> defconfig that allows us to move out SoC specific drivers in order to
> create a generic kernel that can be used across multiple devices with
> different SoCs.

That's quite generic statement... or let me put it that way - we already
have this ability to create a generic kernel supporting different SoCs.
Exynos and other ARMv7 and ARMv8 platforms are multiplatform.

Task is done.

Please be more specific about use case and describe what exactly in
current upstream multiplatform kernel is missing, what is not
multiplatform enough.


> I'm sorry I added confusion by mentioning
> modularization. All of these drivers that I am modifying in this
> series can be modularized which is an ongoing effort, but is not
> addressed here and I don't believe that modularizing them should be a
> requirement before supporting enabling/disabling them.

Since the disabling the driver for a kernel supporting Exynos does not
make any sense, then making it at least modular unfortunately it is a
requirement.

> I will update the series with my patch that refactors the Samsung SoC
> drivers menuconfig to make these visible as well.

I would first recommend to really describe your use case because my
questions about this are still unanswered.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-21 18:04           ` Krzysztof Kozlowski
@ 2021-09-23 12:57             ` Lee Jones
  2021-09-23 13:27               ` Krzysztof Kozlowski
  0 siblings, 1 reply; 23+ messages in thread
From: Lee Jones @ 2021-09-23 12:57 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Will McVicker, Geert Uytterhoeven, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:

> On 21/09/2021 19:58, Will McVicker wrote:
> > On Tue, Sep 21, 2021 at 1:35 AM Krzysztof Kozlowski
> > <krzysztof.kozlowski@canonical.com> wrote:
> >>
> >> On 21/09/2021 09:50, Geert Uytterhoeven wrote:
> >>> On Tue, Sep 21, 2021 at 9:31 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> >>>> On 20/09/2021 21:03, Will McVicker wrote:
> >>>>> COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
> >>>>> to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
> >>>>> "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
> >>>>> or modularize this driver.
> >>>>
> >>>> The clock drivers are essential, you cannot disable them for a generic
> >>>> kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms.
> >>>
> >>> Obviously it's not gonna work if the clock driver is not enabled
> >>> at all.  But does it work if you make the clock driver modular, and
> >>> put it with all other essential driver modules in initramfs?  Debugging
> >>> would be hard, as the serial console driver also relies on clocks
> >>> and PM Domains etc.
> >>
> >> The kernel could boot without clock drivers (default settings from
> >> bootloader), probe clocks from initramfs and proceed with rootfs from
> >> eMMC/SD/net.
> >>
> >> In theory.
> >>
> >> However I have no reports that it ever worked. If there is such working
> >> upstream configuration, I don't mind here. Just please explain this in
> >> the commit msg.
> >>
> >>>
> >>> If not, this patch should be NAKed, until it works with a modular
> >>> clock driver.
> >>>
> >>> If yes, perhaps another line should be added (_before_ the other line)?
> >>>
> >>>   + default m if ARCH_EXYNOS && MODULES
> >>>     default y if ARCH_EXYNOS
> >>>
> >>> However, many developers may want MODULES=y, but not want to bother
> >>> with an initramfs.  So perhaps we need a new symbol
> >>> MINIMUM_GENERIC_KERNEL or so, protected by EXPERT, and make the
> >>> driver default to m if that is enabled?
> >>
> >> Yeah, that's indeed a problem to solve. For most users (and distros)
> >> building kernel for Exynos this should be built-in by default.
> >>
> >> Anyway, the option is non-selectable so it cannot be converted to "m" or
> >> disabled. And this is claimed in the commit msg:
> >> "provide flexibilty for vendors to disable or modularize this driver."
> >>
> >> The commit does not achieve it.
> >>
> >> Best regards,
> >> Krzysztof
> > 
> > Thanks for the reviews! As Lee has explained in his replies, the
> > intent of this series is to provide config flexibility to create a
> > defconfig that allows us to move out SoC specific drivers in order to
> > create a generic kernel that can be used across multiple devices with
> > different SoCs.
> 
> That's quite generic statement... or let me put it that way - we already
> have this ability to create a generic kernel supporting different SoCs.
> Exynos and other ARMv7 and ARMv8 platforms are multiplatform.
> 
> Task is done.

multi_v7_defconfig and ARMv8's defconfig are bloated monoliths which
provide limited flexibility.  Good for testing and messing around -
not much good for real products.

> Please be more specific about use case and describe what exactly in
> current upstream multiplatform kernel is missing, what is not
> multiplatform enough.

The use-case is GKI.  A realistic middle-ground between fully open
source and real-world usage of the Linux kernel in a competitive
technical arena.  GKI aims to be as close to Mainline as possible,
whilst allowing hardware vendors to supply their own software
containing their perceived competitive edge and/or supporting
not-yet-released hardware platforms.

If you end up over-constraining the ability to configure the kernel in
useful/meaningful ways, that makes one of the main (best intention)
aims of GKI, (i.e. to have an upstream first ethos in order to be as
close to upstream as possible) much more difficult.

I put in a lot of effort to ensure GKI doesn't end up as just another
fork of the Linux kernel.  So far, so good, but flexibility and
understanding is key.

> > I'm sorry I added confusion by mentioning
> > modularization. All of these drivers that I am modifying in this
> > series can be modularized which is an ongoing effort, but is not
> > addressed here and I don't believe that modularizing them should be a
> > requirement before supporting enabling/disabling them.
> 
> Since the disabling the driver for a kernel supporting Exynos does not
> make any sense, then making it at least modular unfortunately it is a
> requirement.

I can go with that.

> > I will update the series with my patch that refactors the Samsung SoC
> > drivers menuconfig to make these visible as well.
> 
> I would first recommend to really describe your use case because my
> questions about this are still unanswered.

Hopefully my replies have helped somewhat.

Happy to discuss further if required.

If all else fails, feel free to ping me on IRC (lag).

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-23 12:57             ` Lee Jones
@ 2021-09-23 13:27               ` Krzysztof Kozlowski
  2021-09-23 14:18                 ` Lee Jones
  0 siblings, 1 reply; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-23 13:27 UTC (permalink / raw)
  To: Lee Jones
  Cc: Will McVicker, Geert Uytterhoeven, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On 23/09/2021 14:57, Lee Jones wrote:
> On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
> 
>> On 21/09/2021 19:58, Will McVicker wrote:
>>> On Tue, Sep 21, 2021 at 1:35 AM Krzysztof Kozlowski
>>> <krzysztof.kozlowski@canonical.com> wrote:
>>>>
>>>> On 21/09/2021 09:50, Geert Uytterhoeven wrote:
>>>>> On Tue, Sep 21, 2021 at 9:31 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>>>>>> On 20/09/2021 21:03, Will McVicker wrote:
>>>>>>> COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
>>>>>>> to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
>>>>>>> "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
>>>>>>> or modularize this driver.
>>>>>>
>>>>>> The clock drivers are essential, you cannot disable them for a generic
>>>>>> kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms.
>>>>>
>>>>> Obviously it's not gonna work if the clock driver is not enabled
>>>>> at all.  But does it work if you make the clock driver modular, and
>>>>> put it with all other essential driver modules in initramfs?  Debugging
>>>>> would be hard, as the serial console driver also relies on clocks
>>>>> and PM Domains etc.
>>>>
>>>> The kernel could boot without clock drivers (default settings from
>>>> bootloader), probe clocks from initramfs and proceed with rootfs from
>>>> eMMC/SD/net.
>>>>
>>>> In theory.
>>>>
>>>> However I have no reports that it ever worked. If there is such working
>>>> upstream configuration, I don't mind here. Just please explain this in
>>>> the commit msg.
>>>>
>>>>>
>>>>> If not, this patch should be NAKed, until it works with a modular
>>>>> clock driver.
>>>>>
>>>>> If yes, perhaps another line should be added (_before_ the other line)?
>>>>>
>>>>>   + default m if ARCH_EXYNOS && MODULES
>>>>>     default y if ARCH_EXYNOS
>>>>>
>>>>> However, many developers may want MODULES=y, but not want to bother
>>>>> with an initramfs.  So perhaps we need a new symbol
>>>>> MINIMUM_GENERIC_KERNEL or so, protected by EXPERT, and make the
>>>>> driver default to m if that is enabled?
>>>>
>>>> Yeah, that's indeed a problem to solve. For most users (and distros)
>>>> building kernel for Exynos this should be built-in by default.
>>>>
>>>> Anyway, the option is non-selectable so it cannot be converted to "m" or
>>>> disabled. And this is claimed in the commit msg:
>>>> "provide flexibilty for vendors to disable or modularize this driver."
>>>>
>>>> The commit does not achieve it.
>>>>
>>>> Best regards,
>>>> Krzysztof
>>>
>>> Thanks for the reviews! As Lee has explained in his replies, the
>>> intent of this series is to provide config flexibility to create a
>>> defconfig that allows us to move out SoC specific drivers in order to
>>> create a generic kernel that can be used across multiple devices with
>>> different SoCs.
>>
>> That's quite generic statement... or let me put it that way - we already
>> have this ability to create a generic kernel supporting different SoCs.
>> Exynos and other ARMv7 and ARMv8 platforms are multiplatform.
>>
>> Task is done.
> 
> multi_v7_defconfig and ARMv8's defconfig are bloated monoliths which
> provide limited flexibility.  Good for testing and messing around -
> not much good for real products.

I am not saying about defconfigs. I am saying that ARMv8 platform is
multiplatform so we already solved the problem Will mentioned. :)

> 
>> Please be more specific about use case and describe what exactly in
>> current upstream multiplatform kernel is missing, what is not
>> multiplatform enough.
> 
> The use-case is GKI.  A realistic middle-ground between fully open
> source and real-world usage of the Linux kernel in a competitive
> technical arena.  GKI aims to be as close to Mainline as possible,
> whilst allowing hardware vendors to supply their own software
> containing their perceived competitive edge and/or supporting
> not-yet-released hardware platforms.

<grumpy mode>
Therefore the use case is to not contribute anything upstream around
ARCH_EXYNOS but use it in millions of devices downstream with hundreds
of out-of-tree modules. The use case is to make life easy for the vendor
and out-of-tree code, not for the upstream. Instead of promoting
upstreaming, or leaning towards usptream in some balanced way, the use
case is to entirely go to out-of-tree.

I am not thinking here about edge or not-yet-released platforms but
"ancient" in terms of current SoC business, e.g. 3-5 years old.
</grumpy mode>

> 
> If you end up over-constraining the ability to configure the kernel in
> useful/meaningful ways, that makes one of the main (best intention)
> aims of GKI, (i.e. to have an upstream first ethos in order to be as
> close to upstream as possible) much more difficult.

GKI encourages core kernel changes to be upstreamed but it is
effectively the nail in the coffin of upstreaming vendor SoC changes.
There is simply no incentive for less-cooperative vendor to upstream
it's modules (except usual benefits like code quality and user support
which are not important for less-cooperative vendors).

The kernel should be configured mainly towards mainline platforms. Not
the other way around. This of course does not stop it for supporting
out-of-tree code, but I guess you also know that what's out-of-tree, it
does not exist. :)

> 
> I put in a lot of effort to ensure GKI doesn't end up as just another
> fork of the Linux kernel.  So far, so good, but flexibility and
> understanding is key.
> 
>>> I'm sorry I added confusion by mentioning
>>> modularization. All of these drivers that I am modifying in this
>>> series can be modularized which is an ongoing effort, but is not
>>> addressed here and I don't believe that modularizing them should be a
>>> requirement before supporting enabling/disabling them.
>>
>> Since the disabling the driver for a kernel supporting Exynos does not
>> make any sense, then making it at least modular unfortunately it is a
>> requirement.
> 
> I can go with that.
> 
>>> I will update the series with my patch that refactors the Samsung SoC
>>> drivers menuconfig to make these visible as well.
>>
>> I would first recommend to really describe your use case because my
>> questions about this are still unanswered.
> 
> Hopefully my replies have helped somewhat.
> 
> Happy to discuss further if required.
> 
> If all else fails, feel free to ping me on IRC (lag).

Thanks Lee, you described the use case. In general I like it and support
it, except for what I wrote in the other mail.

Vendor does not contribute much therefore there is no balance in
upstreaming. Since none of other vendor's platforms are supported, I am
looking only at what is supported. From that perspective - the change
proposed by Will and previous guys, does not have much sense.

My perspective probably would change a lot if vendor did contribute some
of its non-edge platforms (3-5 years old)... especially that unlike few
community guys (e.g. PostmarketOS), vendor has shit-tons of money and
the hardware manuals. :)

Instead of pushing this change, please let's give some incentive to the
vendor for upstreaming anything.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-23 13:27               ` Krzysztof Kozlowski
@ 2021-09-23 14:18                 ` Lee Jones
  2021-09-23 16:27                   ` Krzysztof Kozlowski
  0 siblings, 1 reply; 23+ messages in thread
From: Lee Jones @ 2021-09-23 14:18 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Will McVicker, Geert Uytterhoeven, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On Thu, 23 Sep 2021, Krzysztof Kozlowski wrote:

> On 23/09/2021 14:57, Lee Jones wrote:
> > On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
> > 
> >> On 21/09/2021 19:58, Will McVicker wrote:
> >>> On Tue, Sep 21, 2021 at 1:35 AM Krzysztof Kozlowski
> >>> <krzysztof.kozlowski@canonical.com> wrote:
> >>>>
> >>>> On 21/09/2021 09:50, Geert Uytterhoeven wrote:
> >>>>> On Tue, Sep 21, 2021 at 9:31 AM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> >>>>>> On 20/09/2021 21:03, Will McVicker wrote:
> >>>>>>> COMMON_CLK_SAMSUNG is selected by ARCH_EXYNOS which forces this config
> >>>>>>> to be built-in when ARCH_EXYNOS is enabled. Switch the logic to use a
> >>>>>>> "default y if ARCH_EXYNOS" to provide flexibilty for vendors to disable
> >>>>>>> or modularize this driver.
> >>>>>>
> >>>>>> The clock drivers are essential, you cannot disable them for a generic
> >>>>>> kernel supporting ARCH_EXYNOS. Such kernel won't work properly on platforms.
> >>>>>
> >>>>> Obviously it's not gonna work if the clock driver is not enabled
> >>>>> at all.  But does it work if you make the clock driver modular, and
> >>>>> put it with all other essential driver modules in initramfs?  Debugging
> >>>>> would be hard, as the serial console driver also relies on clocks
> >>>>> and PM Domains etc.
> >>>>
> >>>> The kernel could boot without clock drivers (default settings from
> >>>> bootloader), probe clocks from initramfs and proceed with rootfs from
> >>>> eMMC/SD/net.
> >>>>
> >>>> In theory.
> >>>>
> >>>> However I have no reports that it ever worked. If there is such working
> >>>> upstream configuration, I don't mind here. Just please explain this in
> >>>> the commit msg.
> >>>>
> >>>>>
> >>>>> If not, this patch should be NAKed, until it works with a modular
> >>>>> clock driver.
> >>>>>
> >>>>> If yes, perhaps another line should be added (_before_ the other line)?
> >>>>>
> >>>>>   + default m if ARCH_EXYNOS && MODULES
> >>>>>     default y if ARCH_EXYNOS
> >>>>>
> >>>>> However, many developers may want MODULES=y, but not want to bother
> >>>>> with an initramfs.  So perhaps we need a new symbol
> >>>>> MINIMUM_GENERIC_KERNEL or so, protected by EXPERT, and make the
> >>>>> driver default to m if that is enabled?
> >>>>
> >>>> Yeah, that's indeed a problem to solve. For most users (and distros)
> >>>> building kernel for Exynos this should be built-in by default.
> >>>>
> >>>> Anyway, the option is non-selectable so it cannot be converted to "m" or
> >>>> disabled. And this is claimed in the commit msg:
> >>>> "provide flexibilty for vendors to disable or modularize this driver."
> >>>>
> >>>> The commit does not achieve it.
> >>>>
> >>>> Best regards,
> >>>> Krzysztof
> >>>
> >>> Thanks for the reviews! As Lee has explained in his replies, the
> >>> intent of this series is to provide config flexibility to create a
> >>> defconfig that allows us to move out SoC specific drivers in order to
> >>> create a generic kernel that can be used across multiple devices with
> >>> different SoCs.
> >>
> >> That's quite generic statement... or let me put it that way - we already
> >> have this ability to create a generic kernel supporting different SoCs.
> >> Exynos and other ARMv7 and ARMv8 platforms are multiplatform.
> >>
> >> Task is done.
> > 
> > multi_v7_defconfig and ARMv8's defconfig are bloated monoliths which
> > provide limited flexibility.  Good for testing and messing around -
> > not much good for real products.
> 
> I am not saying about defconfigs. I am saying that ARMv8 platform is
> multiplatform so we already solved the problem Will mentioned. :)
> 
> > 
> >> Please be more specific about use case and describe what exactly in
> >> current upstream multiplatform kernel is missing, what is not
> >> multiplatform enough.
> > 
> > The use-case is GKI.  A realistic middle-ground between fully open
> > source and real-world usage of the Linux kernel in a competitive
> > technical arena.  GKI aims to be as close to Mainline as possible,
> > whilst allowing hardware vendors to supply their own software
> > containing their perceived competitive edge and/or supporting
> > not-yet-released hardware platforms.
> 
> <grumpy mode>
> Therefore the use case is to not contribute anything upstream around
> ARCH_EXYNOS but use it in millions of devices downstream with hundreds
> of out-of-tree modules. The use case is to make life easy for the vendor
> and out-of-tree code, not for the upstream. Instead of promoting
> upstreaming, or leaning towards usptream in some balanced way, the use
> case is to entirely go to out-of-tree.
> 
> I am not thinking here about edge or not-yet-released platforms but
> "ancient" in terms of current SoC business, e.g. 3-5 years old.
> </grumpy mode>
> 
> > 
> > If you end up over-constraining the ability to configure the kernel in
> > useful/meaningful ways, that makes one of the main (best intention)
> > aims of GKI, (i.e. to have an upstream first ethos in order to be as
> > close to upstream as possible) much more difficult.
> 
> GKI encourages core kernel changes to be upstreamed but it is
> effectively the nail in the coffin of upstreaming vendor SoC changes.
> There is simply no incentive for less-cooperative vendor to upstream
> it's modules (except usual benefits like code quality and user support
> which are not important for less-cooperative vendors).
> 
> The kernel should be configured mainly towards mainline platforms. Not
> the other way around. This of course does not stop it for supporting
> out-of-tree code, but I guess you also know that what's out-of-tree, it
> does not exist. :)

I'm not sure you've thought the above points through. :)

How is that any of this different to Mainline?

So long as you have the headers for the kernel you wish to compile
against, you can create all the new modules you like in both cases.

> > I put in a lot of effort to ensure GKI doesn't end up as just another
> > fork of the Linux kernel.  So far, so good, but flexibility and
> > understanding is key.
> > 
> >>> I'm sorry I added confusion by mentioning
> >>> modularization. All of these drivers that I am modifying in this
> >>> series can be modularized which is an ongoing effort, but is not
> >>> addressed here and I don't believe that modularizing them should be a
> >>> requirement before supporting enabling/disabling them.
> >>
> >> Since the disabling the driver for a kernel supporting Exynos does not
> >> make any sense, then making it at least modular unfortunately it is a
> >> requirement.
> > 
> > I can go with that.
> > 
> >>> I will update the series with my patch that refactors the Samsung SoC
> >>> drivers menuconfig to make these visible as well.
> >>
> >> I would first recommend to really describe your use case because my
> >> questions about this are still unanswered.
> > 
> > Hopefully my replies have helped somewhat.
> > 
> > Happy to discuss further if required.
> > 
> > If all else fails, feel free to ping me on IRC (lag).
> 
> Thanks Lee, you described the use case. In general I like it and support
> it, except for what I wrote in the other mail.
> 
> Vendor does not contribute much therefore there is no balance in
> upstreaming. Since none of other vendor's platforms are supported, I am
> looking only at what is supported. From that perspective - the change
> proposed by Will and previous guys, does not have much sense.
> 
> My perspective probably would change a lot if vendor did contribute some
> of its non-edge platforms (3-5 years old)... especially that unlike few
> community guys (e.g. PostmarketOS), vendor has shit-tons of money and
> the hardware manuals. :)

But no incentive to upstream code old (dead) platforms that they no
longer make money from.  We're not talking about kind-hearted
individuals here.  These are business entities.

What is the business incentive to put hundreds of thousands of dollars
into something with no RoI?

> Instead of pushing this change, please let's give some incentive to the
> vendor for upstreaming anything.

Again, you're being specific.  We would also like/need to make the
same kinds of changes to other vendor configurations.  One's which do
contribute significantly at their own cost.

The technical reasoning cannot be different because you do or don't
like the way the company operates.  Try to detach a little from
your feelings during discussions which should be purely technical.

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-23 14:18                 ` Lee Jones
@ 2021-09-23 16:27                   ` Krzysztof Kozlowski
  2021-09-23 16:30                     ` Krzysztof Kozlowski
  0 siblings, 1 reply; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-23 16:27 UTC (permalink / raw)
  To: Lee Jones
  Cc: Will McVicker, Geert Uytterhoeven, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On 23/09/2021 16:18, Lee Jones wrote:
>> Thanks Lee, you described the use case. In general I like it and support
>> it, except for what I wrote in the other mail.
>>
>> Vendor does not contribute much therefore there is no balance in
>> upstreaming. Since none of other vendor's platforms are supported, I am
>> looking only at what is supported. From that perspective - the change
>> proposed by Will and previous guys, does not have much sense.
>>
>> My perspective probably would change a lot if vendor did contribute some
>> of its non-edge platforms (3-5 years old)... especially that unlike few
>> community guys (e.g. PostmarketOS), vendor has shit-tons of money and
>> the hardware manuals. :)
> 
> But no incentive to upstream code old (dead) platforms that they no
> longer make money from.  We're not talking about kind-hearted
> individuals here.  These are business entities.
> 
> What is the business incentive to put hundreds of thousands of dollars
> into something with no RoI?

Before you mentioned business entities refrain from upstreaming recent
hardware. You question upstreaming not that recent, so basically
business entity will claim it has zero incentives working with upstream.

Actually there are incentives for both cases - better code quality for
the pieces being base for future devices, selling mainline supported
hardware to other businesses, eventually less work for themselves around
keeping code in sync with mainline. All these are of course difficult to
measure from business perspective.

> 
>> Instead of pushing this change, please let's give some incentive to the
>> vendor for upstreaming anything.
> 
> Again, you're being specific.  We would also like/need to make the
> same kinds of changes to other vendor configurations.  One's which do
> contribute significantly at their own cost.

Yes, I am specific because we talk here about specfic Kconfig changes
for one specific ARM sub-architecture. Same set of changes can be
applied to other SoCs and usually have more sense there because number
of upstream platforms is bigger.

If you have 10 different pinctrl drivers, you might decide to narrow the
defconfigs to subset of it. If you have 2-3, the extra complexity does
not matter and you just enable all of them. That's also decision we made
few years ago internally in Samsung.

> The technical reasoning cannot be different because you do or don't
> like the way the company operates.  Try to detach a little from
> your feelings during discussions which should be purely technical.

I mentioned the less-contributing vendor arguments because you said:

>> Vendors are not able to upstream all functionality right away

That's the side-topic in this discussion.

Technically, all supported Exynos platforms require selecting
ARCH_EXYNOS and require all drivers selected by ARCH_EXYNOS. If you
mention some unsupported out-of-tree platforms, which I cannot
audit/see/use, it is not a valid reason to change statement above. Make
them supported, available to audit and check and statement above stops
being valid.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic
  2021-09-23 16:27                   ` Krzysztof Kozlowski
@ 2021-09-23 16:30                     ` Krzysztof Kozlowski
  0 siblings, 0 replies; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-23 16:30 UTC (permalink / raw)
  To: Lee Jones
  Cc: Will McVicker, Geert Uytterhoeven, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk

On 23/09/2021 18:27, Krzysztof Kozlowski wrote:
> On 23/09/2021 16:18, Lee Jones wrote:
>>> Thanks Lee, you described the use case. In general I like it and support
>>> it, except for what I wrote in the other mail.
>>>
>>> Vendor does not contribute much therefore there is no balance in
>>> upstreaming. Since none of other vendor's platforms are supported, I am
>>> looking only at what is supported. From that perspective - the change
>>> proposed by Will and previous guys, does not have much sense.
>>>
>>> My perspective probably would change a lot if vendor did contribute some
>>> of its non-edge platforms (3-5 years old)... especially that unlike few
>>> community guys (e.g. PostmarketOS), vendor has shit-tons of money and
>>> the hardware manuals. :)
>>
>> But no incentive to upstream code old (dead) platforms that they no
>> longer make money from.  We're not talking about kind-hearted
>> individuals here.  These are business entities.
>>
>> What is the business incentive to put hundreds of thousands of dollars
>> into something with no RoI?
> 
> Before you mentioned business entities refrain from upstreaming recent
> hardware. You question upstreaming not that recent, so basically
> business entity will claim it has zero incentives working with upstream.

Uh, this looks unparseable, I lost some words. Let me write again that part:

Before you mentioned business entities refrain from upstreaming recent
hardware. You question now upstreaming not that recent hardware, so
basically business entity has no incentives to work at all with upstream
on any platform. Neither newest, nor slightly older.


> Actually there are incentives for both cases - better code quality for
> the pieces being base for future devices, selling mainline supported
> hardware to other businesses, eventually less work for themselves around
> keeping code in sync with mainline. All these are of course difficult to
> measure from business perspective.
> 
>>
>>> Instead of pushing this change, please let's give some incentive to the
>>> vendor for upstreaming anything.
>>
>> Again, you're being specific.  We would also like/need to make the
>> same kinds of changes to other vendor configurations.  One's which do
>> contribute significantly at their own cost.
> 
> Yes, I am specific because we talk here about specfic Kconfig changes
> for one specific ARM sub-architecture. Same set of changes can be
> applied to other SoCs and usually have more sense there because number
> of upstream platforms is bigger.
> 
> If you have 10 different pinctrl drivers, you might decide to narrow the
> defconfigs to subset of it. If you have 2-3, the extra complexity does
> not matter and you just enable all of them. That's also decision we made
> few years ago internally in Samsung.
> 
>> The technical reasoning cannot be different because you do or don't
>> like the way the company operates.  Try to detach a little from
>> your feelings during discussions which should be purely technical.
> 
> I mentioned the less-contributing vendor arguments because you said:
> 
>>> Vendors are not able to upstream all functionality right away
> 
> That's the side-topic in this discussion.
> 
> Technically, all supported Exynos platforms require selecting
> ARCH_EXYNOS and require all drivers selected by ARCH_EXYNOS. If you
> mention some unsupported out-of-tree platforms, which I cannot
> audit/see/use, it is not a valid reason to change statement above. Make
> them supported, available to audit and check and statement above stops
> being valid.
> 
> Best regards,
> Krzysztof
> 


Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-21  8:25     ` Krzysztof Kozlowski
  2021-09-21  8:41       ` Lee Jones
@ 2021-09-25  2:17       ` Saravana Kannan
  2021-09-27  8:08         ` Krzysztof Kozlowski
  1 sibling, 1 reply; 23+ messages in thread
From: Saravana Kannan @ 2021-09-25  2:17 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Lee Jones, Will McVicker, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Linus Walleij, Alessandro Zummo, Alexandre Belloni,
	kernel-team, linux-arm-kernel, linux-kernel, linux-samsung-soc,
	linux-clk, linux-gpio, linux-rtc, Geert Uytterhoeven,
	Kevin Hilman

On Tue, Sep 21, 2021 at 1:25 AM Krzysztof Kozlowski
<krzysztof.kozlowski@canonical.com> wrote:
>
> On 21/09/2021 10:11, Lee Jones wrote:
> > On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
> >
> >> On 20/09/2021 21:03, Will McVicker wrote:
> >>> This patch series tries to address the issue of ARCH_EXYNOS force selecting
> >>> a handful of drivers without allowing the vendor to override any of the
> >>> default configs. This takes away from the flexibilty of compiling a generic
> >>> kernel with exynos kernel modules. For example, it doesn't allow vendors to
> >>> modularize these drivers out of the core kernel in order to share a generic
> >>> kernel image across multiple devices that require device-specific kernel
> >>> modules.
> >>
> >> You do not address the issue in these patches. The problem you describe
> >> is that drivers are not modules and you are not changing them into modules.
> >
> > The wording is unfortunate.  The reason for this change doesn't have
> > much to do with kernel modules.
> >
> > Let's go back in time 18 months or so when Greg KH submitted this [0]
> > patch, which you Acked.  Greg was trying to solve the problem of not
> > having to enable ARCH_EXYNOS on kernels which are designed to be
> > platform agnostic (sometimes called Generic Kernels).  For some reason
> > SERIAL_SAMSUNG is the only symbol with these dependencies, so the
> > solution seemed simple and straight forward at the time.
> >
> > However, For sound reasons Geert NACKed the patch.
> >
> > Quoting from [1] he says:
> >
> >   "A generic kernel will include Samsung SoC support, hence
> >   PLAT_SAMSUNG or ARCH_EXYNOS will be enabled."
>
> Yes, it's correct reasoning. There is also one more use-case -
> non-upstreamed (out of tree) platform which wants to use Exynos-specific
> drivers. Something like was happening with Apple M1 except that it got
> upstreamed and we do not care much about out-of-tree.
>
> >
> > However, since the entry for ARCH_EXYNOS *insists* on building-in a
> > bunch of other symbols (via 'select') which will be unused in most
> > cases, this is not a currently acceptable approach for many Generic
> > Kernels due to size constraints.
>
> In the mainline kernel there is no such use case. If you want to have
> Exynos-whatever-driver (e.g. SERIAL_SAMSUNG or S3C RTC), you should
> select ARCH_EXYNOS because otherwise it does not make any sense. Zero
> sense. Such kernel won't work.
>
> It makes sense only if there is some other work, hidden here, where
> someone might want to have SERIAL_SAMSUNG or S3C RTC without
> ARCH_EXYNOS. Although GKI is not that work because GKI kernel will
> select ARCH_EXYNOS. It must select ARCH_EXYNOS if it wants to support
> Exynos platforms.
>
> Therefore I expect first to bring this "some other work, hidden here" to
> broader audience, so we can review its use case.
>
> >
> > What this patch does is migrates those symbols from being 'select'ed
> > (always built-in with no recourse) to 'default y'.  Where the former
> > cannot be over-ridden, but the latter can be via a vendor's
> > defconfig/fragment.
>
> It cannot be overridden by vendor fragment because options are not
> visible. You cannot change them.
>
> The patch does nothing in this regard (making them selectable/possible
> to disable), which is why I complained.
>
> >
> > I doubt many (any?) of these symbols can be converted to kernel
> > modules anyway, as they are required very early on in the boot
> > sequence.
>
> True, some could, some not. Also some platforms are set up via
> bootloader, so actually could "survive" till module is loaded from some
> initrd.

Hi Krzysztof,

I was trying to chime in, but the discussion got spread out across all
the patches. Since the cover letter seems to have everyone, I thought
I'd reply here. Hope you don't mind. I'll try to respond/chime in on
the various topics that were raised across the patches.

Yes, the next patch series would To/Cc folks correctly. William simply
forgot to use the --to-cover and --cc-cover options when using git
send-email.

I agree with you that it doesn't make sense to have ARCH_EXYNOS
enabled but to have all the clock drivers exynos compiled out. Then
one obviously can't boot an exynos platform using that kernel. I think
William is going to send out a new patch series with a few drivers
modularized. That'll ensure all the common exynos clock code is
modularized and we have a few examples of exynos clock modules.

Speaking of modules, a fully modularized generic ARM64 kernel where
everything is modularized out and we only load the necessary modules
is a great goal. And this is where I can chime in the most since I
wrote fw_devlink and tested this out. Such a kernel is not
hypothetical. IIRC hikey960 can already do this. There's an upstream
amlogic(?) board that can do this (Kevin Hilman has done that). A more
complex/recent/powerful, but downstream example is the Pixel 5 -- it
has a fully modular kernel. 320+ modules! Including interrupt
controllers, timers, pinctrl and clocks.

I can assure you any of the framework code related to pulling off
booting a fully modular ARM64 kernel is already upstreamed
(fw_devlink, irq framework changes, etc) or sent upstream (timer -- by
a SoC vendor, etc) and being worked on. As for fw_devlink, I've
extended it way past what GKI or Android would need. It would have
been super trivial if all I wanted to do was support Android devices.
I've also upstreamed changes that improve module loading time for all
ARM64 modules. All of this and more upstream work came out of GKI and
our push to be upstream first -- so I think it's reasonable to say the
GKI effort helps and cares to get more work upstreamed.

Speaking of GKI, let's not speak of it. It really doesn't matter.
Android is just yet another distribution (albeit a very popular one).
The part that's relevant to upstream/all the other distributions is
the fully modular generic ARM64 kernel and that's what we should focus
on.

In that context, I think William's attempts are reasonable and I think
he'll be glad to fix up any technical issues that people point out. So
hopefully we can focus on that?

Cheers,
Saravana

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-25  2:17       ` Saravana Kannan
@ 2021-09-27  8:08         ` Krzysztof Kozlowski
  2021-09-27  8:16           ` Geert Uytterhoeven
  2021-09-27 18:07           ` Saravana Kannan
  0 siblings, 2 replies; 23+ messages in thread
From: Krzysztof Kozlowski @ 2021-09-27  8:08 UTC (permalink / raw)
  To: Saravana Kannan
  Cc: Lee Jones, Will McVicker, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Linus Walleij, Alessandro Zummo, Alexandre Belloni,
	kernel-team, linux-arm-kernel, linux-kernel, linux-samsung-soc,
	linux-clk, linux-gpio, linux-rtc, Geert Uytterhoeven,
	Kevin Hilman

On 25/09/2021 04:17, Saravana Kannan wrote:
> On Tue, Sep 21, 2021 at 1:25 AM Krzysztof Kozlowski
> <krzysztof.kozlowski@canonical.com> wrote:
>>
>> On 21/09/2021 10:11, Lee Jones wrote:
>>> On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
>>>
>>>> On 20/09/2021 21:03, Will McVicker wrote:
>>>>> This patch series tries to address the issue of ARCH_EXYNOS force selecting
>>>>> a handful of drivers without allowing the vendor to override any of the
>>>>> default configs. This takes away from the flexibilty of compiling a generic
>>>>> kernel with exynos kernel modules. For example, it doesn't allow vendors to
>>>>> modularize these drivers out of the core kernel in order to share a generic
>>>>> kernel image across multiple devices that require device-specific kernel
>>>>> modules.
>>>>
>>>> You do not address the issue in these patches. The problem you describe
>>>> is that drivers are not modules and you are not changing them into modules.
>>>
>>> The wording is unfortunate.  The reason for this change doesn't have
>>> much to do with kernel modules.
>>>
>>> Let's go back in time 18 months or so when Greg KH submitted this [0]
>>> patch, which you Acked.  Greg was trying to solve the problem of not
>>> having to enable ARCH_EXYNOS on kernels which are designed to be
>>> platform agnostic (sometimes called Generic Kernels).  For some reason
>>> SERIAL_SAMSUNG is the only symbol with these dependencies, so the
>>> solution seemed simple and straight forward at the time.
>>>
>>> However, For sound reasons Geert NACKed the patch.
>>>
>>> Quoting from [1] he says:
>>>
>>>   "A generic kernel will include Samsung SoC support, hence
>>>   PLAT_SAMSUNG or ARCH_EXYNOS will be enabled."
>>
>> Yes, it's correct reasoning. There is also one more use-case -
>> non-upstreamed (out of tree) platform which wants to use Exynos-specific
>> drivers. Something like was happening with Apple M1 except that it got
>> upstreamed and we do not care much about out-of-tree.
>>
>>>
>>> However, since the entry for ARCH_EXYNOS *insists* on building-in a
>>> bunch of other symbols (via 'select') which will be unused in most
>>> cases, this is not a currently acceptable approach for many Generic
>>> Kernels due to size constraints.
>>
>> In the mainline kernel there is no such use case. If you want to have
>> Exynos-whatever-driver (e.g. SERIAL_SAMSUNG or S3C RTC), you should
>> select ARCH_EXYNOS because otherwise it does not make any sense. Zero
>> sense. Such kernel won't work.
>>
>> It makes sense only if there is some other work, hidden here, where
>> someone might want to have SERIAL_SAMSUNG or S3C RTC without
>> ARCH_EXYNOS. Although GKI is not that work because GKI kernel will
>> select ARCH_EXYNOS. It must select ARCH_EXYNOS if it wants to support
>> Exynos platforms.
>>
>> Therefore I expect first to bring this "some other work, hidden here" to
>> broader audience, so we can review its use case.
>>
>>>
>>> What this patch does is migrates those symbols from being 'select'ed
>>> (always built-in with no recourse) to 'default y'.  Where the former
>>> cannot be over-ridden, but the latter can be via a vendor's
>>> defconfig/fragment.
>>
>> It cannot be overridden by vendor fragment because options are not
>> visible. You cannot change them.
>>
>> The patch does nothing in this regard (making them selectable/possible
>> to disable), which is why I complained.
>>
>>>
>>> I doubt many (any?) of these symbols can be converted to kernel
>>> modules anyway, as they are required very early on in the boot
>>> sequence.
>>
>> True, some could, some not. Also some platforms are set up via
>> bootloader, so actually could "survive" till module is loaded from some
>> initrd.
> 
> Hi Krzysztof,
> 
> I was trying to chime in, but the discussion got spread out across all
> the patches. Since the cover letter seems to have everyone, I thought
> I'd reply here. Hope you don't mind. I'll try to respond/chime in on
> the various topics that were raised across the patches.
> 
> Yes, the next patch series would To/Cc folks correctly. William simply
> forgot to use the --to-cover and --cc-cover options when using git
> send-email.
> 
> I agree with you that it doesn't make sense to have ARCH_EXYNOS
> enabled but to have all the clock drivers exynos compiled out. Then
> one obviously can't boot an exynos platform using that kernel.

If downstream kernel does not use any upstream platforms (e.g.
Exynos5433 or Exynos7) and has its own drivers for everything, then
downstream does not even need ARCH_EXYNOS. Just disable it.

> I think
> William is going to send out a new patch series with a few drivers
> modularized. That'll ensure all the common exynos clock code is
> modularized and we have a few examples of exynos clock modules.

If it works on supported Exynos platforms: awesome!
If it does not work: not that good. I understand that downstream or
vendor do not want to mainline their SoC drivers and SoC support. Either
because HW is too new (do not disclose it) or it is too old (lost
interest). It's their right, they do not have to work with mainline on
this. However changing mainline kernel in such a case to affect it so
you can use your non-upstreamed drivers is wrong.

Affecting upstream platforms just because vendor/downstream does not
want to mainline some code is unacceptable. Please upstream your drivers
and DTS.

Everyone else are working like this. NXP, Renesas, Xilinx, TI, Rockchip,
AllWinner. Samsung or Google is not special to receive an exception for
this.

> 
> Speaking of modules, a fully modularized generic ARM64 kernel where
> everything is modularized out and we only load the necessary modules
> is a great goal. And this is where I can chime in the most since I
> wrote fw_devlink and tested this out. Such a kernel is not
> hypothetical. IIRC hikey960 can already do this. There's an upstream
> amlogic(?) board that can do this (Kevin Hilman has done that). A more
> complex/recent/powerful, but downstream example is the Pixel 5 -- it
> has a fully modular kernel. 320+ modules! Including interrupt
> controllers, timers, pinctrl and clocks.

Awesome! I am in, if it works. :)

> I can assure you any of the framework code related to pulling off
> booting a fully modular ARM64 kernel is already upstreamed
> (fw_devlink, irq framework changes, etc) or sent upstream (timer -- by
> a SoC vendor, etc) and being worked on. As for fw_devlink, I've
> extended it way past what GKI or Android would need. It would have
> been super trivial if all I wanted to do was support Android devices.
> I've also upstreamed changes that improve module loading time for all
> ARM64 modules. All of this and more upstream work came out of GKI and
> our push to be upstream first -- so I think it's reasonable to say the
> GKI effort helps and cares to get more work upstreamed.

Except UFS driver and recent Linaro work on Exynos850, none of these
apply to the vendor discussed here.

> Speaking of GKI, let's not speak of it. It really doesn't matter.
> Android is just yet another distribution (albeit a very popular one).
> The part that's relevant to upstream/all the other distributions is
> the fully modular generic ARM64 kernel and that's what we should focus
> on.
> 
> In that context, I think William's attempts are reasonable and I think
> he'll be glad to fix up any technical issues that people point out. So
> hopefully we can focus on that?

Yes, we can focus on that. In technical issues, I do not agree to
affecting negatively supported platforms just because downstream/vendor
does not want to send upstream its drivers.

Please upstream your drivers. By "your" I mean all the drivers which you
want to enable after disabling ARCH_EXYNOS mainline drivers.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-27  8:08         ` Krzysztof Kozlowski
@ 2021-09-27  8:16           ` Geert Uytterhoeven
  2021-09-27 18:07           ` Saravana Kannan
  1 sibling, 0 replies; 23+ messages in thread
From: Geert Uytterhoeven @ 2021-09-27  8:16 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Saravana Kannan, Lee Jones, Will McVicker, Catalin Marinas,
	Will Deacon, Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi,
	Michael Turquette, Stephen Boyd, Linus Walleij, Alessandro Zummo,
	Alexandre Belloni, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk,
	open list:GPIO SUBSYSTEM, linux-rtc, Kevin Hilman

Hi Krzysztof,

On Mon, Sep 27, 2021 at 10:08 AM Krzysztof Kozlowski
<krzysztof.kozlowski@canonical.com> wrote:
> On 25/09/2021 04:17, Saravana Kannan wrote:
> > On Tue, Sep 21, 2021 at 1:25 AM Krzysztof Kozlowski
> > <krzysztof.kozlowski@canonical.com> wrote:
> >> On 21/09/2021 10:11, Lee Jones wrote:
> >>> On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
> >>>> On 20/09/2021 21:03, Will McVicker wrote:
> >>>>> This patch series tries to address the issue of ARCH_EXYNOS force selecting
> >>>>> a handful of drivers without allowing the vendor to override any of the
> >>>>> default configs. This takes away from the flexibilty of compiling a generic
> >>>>> kernel with exynos kernel modules. For example, it doesn't allow vendors to
> >>>>> modularize these drivers out of the core kernel in order to share a generic
> >>>>> kernel image across multiple devices that require device-specific kernel
> >>>>> modules.
> >>>>
> >>>> You do not address the issue in these patches. The problem you describe
> >>>> is that drivers are not modules and you are not changing them into modules.
> >>>
> >>> The wording is unfortunate.  The reason for this change doesn't have
> >>> much to do with kernel modules.
> >>>
> >>> Let's go back in time 18 months or so when Greg KH submitted this [0]
> >>> patch, which you Acked.  Greg was trying to solve the problem of not
> >>> having to enable ARCH_EXYNOS on kernels which are designed to be
> >>> platform agnostic (sometimes called Generic Kernels).  For some reason
> >>> SERIAL_SAMSUNG is the only symbol with these dependencies, so the
> >>> solution seemed simple and straight forward at the time.
> >>>
> >>> However, For sound reasons Geert NACKed the patch.
> >>>
> >>> Quoting from [1] he says:
> >>>
> >>>   "A generic kernel will include Samsung SoC support, hence
> >>>   PLAT_SAMSUNG or ARCH_EXYNOS will be enabled."
> >>
> >> Yes, it's correct reasoning. There is also one more use-case -
> >> non-upstreamed (out of tree) platform which wants to use Exynos-specific
> >> drivers. Something like was happening with Apple M1 except that it got
> >> upstreamed and we do not care much about out-of-tree.
> >>
> >>> However, since the entry for ARCH_EXYNOS *insists* on building-in a
> >>> bunch of other symbols (via 'select') which will be unused in most
> >>> cases, this is not a currently acceptable approach for many Generic
> >>> Kernels due to size constraints.
> >>
> >> In the mainline kernel there is no such use case. If you want to have
> >> Exynos-whatever-driver (e.g. SERIAL_SAMSUNG or S3C RTC), you should
> >> select ARCH_EXYNOS because otherwise it does not make any sense. Zero
> >> sense. Such kernel won't work.
> >>
> >> It makes sense only if there is some other work, hidden here, where
> >> someone might want to have SERIAL_SAMSUNG or S3C RTC without
> >> ARCH_EXYNOS. Although GKI is not that work because GKI kernel will
> >> select ARCH_EXYNOS. It must select ARCH_EXYNOS if it wants to support
> >> Exynos platforms.
> >>
> >> Therefore I expect first to bring this "some other work, hidden here" to
> >> broader audience, so we can review its use case.
> >>
> >>> What this patch does is migrates those symbols from being 'select'ed
> >>> (always built-in with no recourse) to 'default y'.  Where the former
> >>> cannot be over-ridden, but the latter can be via a vendor's
> >>> defconfig/fragment.
> >>
> >> It cannot be overridden by vendor fragment because options are not
> >> visible. You cannot change them.
> >>
> >> The patch does nothing in this regard (making them selectable/possible
> >> to disable), which is why I complained.
> >>
> >>> I doubt many (any?) of these symbols can be converted to kernel
> >>> modules anyway, as they are required very early on in the boot
> >>> sequence.
> >>
> >> True, some could, some not. Also some platforms are set up via
> >> bootloader, so actually could "survive" till module is loaded from some
> >> initrd.
> >
> > I was trying to chime in, but the discussion got spread out across all
> > the patches. Since the cover letter seems to have everyone, I thought
> > I'd reply here. Hope you don't mind. I'll try to respond/chime in on
> > the various topics that were raised across the patches.
> >
> > Yes, the next patch series would To/Cc folks correctly. William simply
> > forgot to use the --to-cover and --cc-cover options when using git
> > send-email.
> >
> > I agree with you that it doesn't make sense to have ARCH_EXYNOS
> > enabled but to have all the clock drivers exynos compiled out. Then
> > one obviously can't boot an exynos platform using that kernel.
>
> If downstream kernel does not use any upstream platforms (e.g.
> Exynos5433 or Exynos7) and has its own drivers for everything, then
> downstream does not even need ARCH_EXYNOS. Just disable it.

I guess that's how they got to "[PATCH 1/2] tty: serial: samsung_tty:
build it for any platform"...
https://lore.kernel.org/lkml/20200220102628.3371996-1-gregkh@linuxfoundation.org/

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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 Torvalds

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-27  8:08         ` Krzysztof Kozlowski
  2021-09-27  8:16           ` Geert Uytterhoeven
@ 2021-09-27 18:07           ` Saravana Kannan
  2021-09-27 19:54             ` Geert Uytterhoeven
  1 sibling, 1 reply; 23+ messages in thread
From: Saravana Kannan @ 2021-09-27 18:07 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Lee Jones, Will McVicker, Catalin Marinas, Will Deacon,
	Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi, Michael Turquette,
	Stephen Boyd, Linus Walleij, Alessandro Zummo, Alexandre Belloni,
	kernel-team, linux-arm-kernel, linux-kernel, linux-samsung-soc,
	linux-clk, linux-gpio, linux-rtc, Geert Uytterhoeven,
	Kevin Hilman

On Mon, Sep 27, 2021 at 1:08 AM Krzysztof Kozlowski
<krzysztof.kozlowski@canonical.com> wrote:
>
> On 25/09/2021 04:17, Saravana Kannan wrote:
> > On Tue, Sep 21, 2021 at 1:25 AM Krzysztof Kozlowski
> > <krzysztof.kozlowski@canonical.com> wrote:
> >>
> >> On 21/09/2021 10:11, Lee Jones wrote:
> >>> On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
> >>>
> >>>> On 20/09/2021 21:03, Will McVicker wrote:
> >>>>> This patch series tries to address the issue of ARCH_EXYNOS force selecting
> >>>>> a handful of drivers without allowing the vendor to override any of the
> >>>>> default configs. This takes away from the flexibilty of compiling a generic
> >>>>> kernel with exynos kernel modules. For example, it doesn't allow vendors to
> >>>>> modularize these drivers out of the core kernel in order to share a generic
> >>>>> kernel image across multiple devices that require device-specific kernel
> >>>>> modules.
> >>>>
> >>>> You do not address the issue in these patches. The problem you describe
> >>>> is that drivers are not modules and you are not changing them into modules.
> >>>
> >>> The wording is unfortunate.  The reason for this change doesn't have
> >>> much to do with kernel modules.
> >>>
> >>> Let's go back in time 18 months or so when Greg KH submitted this [0]
> >>> patch, which you Acked.  Greg was trying to solve the problem of not
> >>> having to enable ARCH_EXYNOS on kernels which are designed to be
> >>> platform agnostic (sometimes called Generic Kernels).  For some reason
> >>> SERIAL_SAMSUNG is the only symbol with these dependencies, so the
> >>> solution seemed simple and straight forward at the time.
> >>>
> >>> However, For sound reasons Geert NACKed the patch.
> >>>
> >>> Quoting from [1] he says:
> >>>
> >>>   "A generic kernel will include Samsung SoC support, hence
> >>>   PLAT_SAMSUNG or ARCH_EXYNOS will be enabled."
> >>
> >> Yes, it's correct reasoning. There is also one more use-case -
> >> non-upstreamed (out of tree) platform which wants to use Exynos-specific
> >> drivers. Something like was happening with Apple M1 except that it got
> >> upstreamed and we do not care much about out-of-tree.
> >>
> >>>
> >>> However, since the entry for ARCH_EXYNOS *insists* on building-in a
> >>> bunch of other symbols (via 'select') which will be unused in most
> >>> cases, this is not a currently acceptable approach for many Generic
> >>> Kernels due to size constraints.
> >>
> >> In the mainline kernel there is no such use case. If you want to have
> >> Exynos-whatever-driver (e.g. SERIAL_SAMSUNG or S3C RTC), you should
> >> select ARCH_EXYNOS because otherwise it does not make any sense. Zero
> >> sense. Such kernel won't work.
> >>
> >> It makes sense only if there is some other work, hidden here, where
> >> someone might want to have SERIAL_SAMSUNG or S3C RTC without
> >> ARCH_EXYNOS. Although GKI is not that work because GKI kernel will
> >> select ARCH_EXYNOS. It must select ARCH_EXYNOS if it wants to support
> >> Exynos platforms.
> >>
> >> Therefore I expect first to bring this "some other work, hidden here" to
> >> broader audience, so we can review its use case.
> >>
> >>>
> >>> What this patch does is migrates those symbols from being 'select'ed
> >>> (always built-in with no recourse) to 'default y'.  Where the former
> >>> cannot be over-ridden, but the latter can be via a vendor's
> >>> defconfig/fragment.
> >>
> >> It cannot be overridden by vendor fragment because options are not
> >> visible. You cannot change them.
> >>
> >> The patch does nothing in this regard (making them selectable/possible
> >> to disable), which is why I complained.
> >>
> >>>
> >>> I doubt many (any?) of these symbols can be converted to kernel
> >>> modules anyway, as they are required very early on in the boot
> >>> sequence.
> >>
> >> True, some could, some not. Also some platforms are set up via
> >> bootloader, so actually could "survive" till module is loaded from some
> >> initrd.
> >
> > Hi Krzysztof,
> >
> > I was trying to chime in, but the discussion got spread out across all
> > the patches. Since the cover letter seems to have everyone, I thought
> > I'd reply here. Hope you don't mind. I'll try to respond/chime in on
> > the various topics that were raised across the patches.
> >
> > Yes, the next patch series would To/Cc folks correctly. William simply
> > forgot to use the --to-cover and --cc-cover options when using git
> > send-email.
> >
> > I agree with you that it doesn't make sense to have ARCH_EXYNOS
> > enabled but to have all the clock drivers exynos compiled out. Then
> > one obviously can't boot an exynos platform using that kernel.
>
> If downstream kernel does not use any upstream platforms (e.g.
> Exynos5433 or Exynos7) and has its own drivers for everything, then
> downstream does not even need ARCH_EXYNOS. Just disable it.

As Geert pointed out in another reply, that prevents the use of
earlyconsole on an exynos SoC + fully modular generic kernel. Are we
okay with removing the ARCH_EXYNOS dependency on the early console
driver now?

> > I think
> > William is going to send out a new patch series with a few drivers
> > modularized. That'll ensure all the common exynos clock code is
> > modularized and we have a few examples of exynos clock modules.
>
> If it works on supported Exynos platforms: awesome!

Yes, that's the idea :) What's the point of sending a module upstream
if it doesn't work with upstream? And this is where William would need
help with testing.

> If it does not work: not that good. I understand that downstream or
> vendor do not want to mainline their SoC drivers and SoC support. Either
> because HW is too new (do not disclose it) or it is too old (lost
> interest). It's their right, they do not have to work with mainline on
> this. However changing mainline kernel in such a case to affect it so
> you can use your non-upstreamed drivers is wrong.

Since the goal is to have some of the existing clock drivers work as
modules, we wouldn't be running into this situation above.

> Affecting upstream platforms just because vendor/downstream does not
> want to mainline some code is unacceptable. Please upstream your drivers
> and DTS.
>
> Everyone else are working like this. NXP, Renesas, Xilinx, TI, Rockchip,
> AllWinner. Samsung or Google is not special to receive an exception for
> this.
>
> >
> > Speaking of modules, a fully modularized generic ARM64 kernel where
> > everything is modularized out and we only load the necessary modules
> > is a great goal. And this is where I can chime in the most since I
> > wrote fw_devlink and tested this out. Such a kernel is not
> > hypothetical. IIRC hikey960 can already do this. There's an upstream
> > amlogic(?) board that can do this (Kevin Hilman has done that). A more
> > complex/recent/powerful, but downstream example is the Pixel 5 -- it
> > has a fully modular kernel. 320+ modules! Including interrupt
> > controllers, timers, pinctrl and clocks.
>
> Awesome! I am in, if it works. :)

Great!

> > I can assure you any of the framework code related to pulling off
> > booting a fully modular ARM64 kernel is already upstreamed
> > (fw_devlink, irq framework changes, etc) or sent upstream (timer -- by
> > a SoC vendor, etc) and being worked on. As for fw_devlink, I've
> > extended it way past what GKI or Android would need. It would have
> > been super trivial if all I wanted to do was support Android devices.
> > I've also upstreamed changes that improve module loading time for all
> > ARM64 modules. All of this and more upstream work came out of GKI and
> > our push to be upstream first -- so I think it's reasonable to say the
> > GKI effort helps and cares to get more work upstreamed.
>
> Except UFS driver and recent Linaro work on Exynos850, none of these
> apply to the vendor discussed here.

I obviously can't force a vendor to upstream their stuff and I can't
speak for them. However the Android kernel team's goal is to have the
core Android kernel be the upstream kernel (we are making progress
every year). This will also have the nice effect that vendor
downstream drivers written for Android would automatically be
compatible with upstream and way more likely to get upstreamed.

> > Speaking of GKI, let's not speak of it. It really doesn't matter.
> > Android is just yet another distribution (albeit a very popular one).
> > The part that's relevant to upstream/all the other distributions is
> > the fully modular generic ARM64 kernel and that's what we should focus
> > on.
> >
> > In that context, I think William's attempts are reasonable and I think
> > he'll be glad to fix up any technical issues that people point out. So
> > hopefully we can focus on that?
>
> Yes, we can focus on that.

Thanks!

> In technical issues, I do not agree to
> affecting negatively supported platforms just because downstream/vendor
> does not want to send upstream its drivers.
>
> Please upstream your drivers. By "your" I mean all the drivers which you
> want to enable after disabling ARCH_EXYNOS mainline drivers.

I'm not sure I fully understood this part. But if your point is that
we shouldn't have a negative impact on hardware supported in upstream
just so a downstream driver can work, I completely agree with you.

At the same time, it also doesn't make sense to have a negative impact
on upstream (rejecting patches that are working towards a fully
modular generic ARM64 kernel) just because it might also help
downstream drivers. That is like cutting your nose to spite your face.

Also, by taking this position, you are just making it even harder to
upstream the downstream drivers while also hurting upstream. Which is
clearly not what we want. Almost all vendors have engineers working
for them that'd like to see more of their code upstream. Treating them
as one monolithic "vendor" entity doesn't help. You are just making it
harder for the pro-upstream engineers to make a case for upstreaming
their drivers.


-Saravana

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs
  2021-09-27 18:07           ` Saravana Kannan
@ 2021-09-27 19:54             ` Geert Uytterhoeven
  0 siblings, 0 replies; 23+ messages in thread
From: Geert Uytterhoeven @ 2021-09-27 19:54 UTC (permalink / raw)
  To: Saravana Kannan
  Cc: Krzysztof Kozlowski, Lee Jones, Will McVicker, Catalin Marinas,
	Will Deacon, Sylwester Nawrocki, Tomasz Figa, Chanwoo Choi,
	Michael Turquette, Stephen Boyd, Linus Walleij, Alessandro Zummo,
	Alexandre Belloni, Android Kernel Team, Linux ARM,
	Linux Kernel Mailing List, linux-samsung-soc, linux-clk,
	open list:GPIO SUBSYSTEM, linux-rtc, Kevin Hilman

Hi Saravana,

On Mon, Sep 27, 2021 at 8:07 PM Saravana Kannan <saravanak@google.com> wrote:
> On Mon, Sep 27, 2021 at 1:08 AM Krzysztof Kozlowski
> <krzysztof.kozlowski@canonical.com> wrote:
> > On 25/09/2021 04:17, Saravana Kannan wrote:
> > > On Tue, Sep 21, 2021 at 1:25 AM Krzysztof Kozlowski
> > > <krzysztof.kozlowski@canonical.com> wrote:
> > >> On 21/09/2021 10:11, Lee Jones wrote:
> > >>> On Tue, 21 Sep 2021, Krzysztof Kozlowski wrote:
> > >>>> On 20/09/2021 21:03, Will McVicker wrote:
> > >>>>> This patch series tries to address the issue of ARCH_EXYNOS force selecting
> > >>>>> a handful of drivers without allowing the vendor to override any of the
> > >>>>> default configs. This takes away from the flexibilty of compiling a generic
> > >>>>> kernel with exynos kernel modules. For example, it doesn't allow vendors to
> > >>>>> modularize these drivers out of the core kernel in order to share a generic
> > >>>>> kernel image across multiple devices that require device-specific kernel
> > >>>>> modules.
> > >>>>
> > >>>> You do not address the issue in these patches. The problem you describe
> > >>>> is that drivers are not modules and you are not changing them into modules.
> > >>>
> > >>> The wording is unfortunate.  The reason for this change doesn't have
> > >>> much to do with kernel modules.
> > >>>
> > >>> Let's go back in time 18 months or so when Greg KH submitted this [0]
> > >>> patch, which you Acked.  Greg was trying to solve the problem of not
> > >>> having to enable ARCH_EXYNOS on kernels which are designed to be
> > >>> platform agnostic (sometimes called Generic Kernels).  For some reason
> > >>> SERIAL_SAMSUNG is the only symbol with these dependencies, so the
> > >>> solution seemed simple and straight forward at the time.
> > >>>
> > >>> However, For sound reasons Geert NACKed the patch.
> > >>>
> > >>> Quoting from [1] he says:
> > >>>
> > >>>   "A generic kernel will include Samsung SoC support, hence
> > >>>   PLAT_SAMSUNG or ARCH_EXYNOS will be enabled."
> > >>
> > >> Yes, it's correct reasoning. There is also one more use-case -
> > >> non-upstreamed (out of tree) platform which wants to use Exynos-specific
> > >> drivers. Something like was happening with Apple M1 except that it got
> > >> upstreamed and we do not care much about out-of-tree.
> > >>
> > >>>
> > >>> However, since the entry for ARCH_EXYNOS *insists* on building-in a
> > >>> bunch of other symbols (via 'select') which will be unused in most
> > >>> cases, this is not a currently acceptable approach for many Generic
> > >>> Kernels due to size constraints.
> > >>
> > >> In the mainline kernel there is no such use case. If you want to have
> > >> Exynos-whatever-driver (e.g. SERIAL_SAMSUNG or S3C RTC), you should
> > >> select ARCH_EXYNOS because otherwise it does not make any sense. Zero
> > >> sense. Such kernel won't work.
> > >>
> > >> It makes sense only if there is some other work, hidden here, where
> > >> someone might want to have SERIAL_SAMSUNG or S3C RTC without
> > >> ARCH_EXYNOS. Although GKI is not that work because GKI kernel will
> > >> select ARCH_EXYNOS. It must select ARCH_EXYNOS if it wants to support
> > >> Exynos platforms.
> > >>
> > >> Therefore I expect first to bring this "some other work, hidden here" to
> > >> broader audience, so we can review its use case.
> > >>
> > >>>
> > >>> What this patch does is migrates those symbols from being 'select'ed
> > >>> (always built-in with no recourse) to 'default y'.  Where the former
> > >>> cannot be over-ridden, but the latter can be via a vendor's
> > >>> defconfig/fragment.
> > >>
> > >> It cannot be overridden by vendor fragment because options are not
> > >> visible. You cannot change them.
> > >>
> > >> The patch does nothing in this regard (making them selectable/possible
> > >> to disable), which is why I complained.
> > >>
> > >>>
> > >>> I doubt many (any?) of these symbols can be converted to kernel
> > >>> modules anyway, as they are required very early on in the boot
> > >>> sequence.
> > >>
> > >> True, some could, some not. Also some platforms are set up via
> > >> bootloader, so actually could "survive" till module is loaded from some
> > >> initrd.
> > >
> > > I was trying to chime in, but the discussion got spread out across all
> > > the patches. Since the cover letter seems to have everyone, I thought
> > > I'd reply here. Hope you don't mind. I'll try to respond/chime in on
> > > the various topics that were raised across the patches.
> > >
> > > Yes, the next patch series would To/Cc folks correctly. William simply
> > > forgot to use the --to-cover and --cc-cover options when using git
> > > send-email.
> > >
> > > I agree with you that it doesn't make sense to have ARCH_EXYNOS
> > > enabled but to have all the clock drivers exynos compiled out. Then
> > > one obviously can't boot an exynos platform using that kernel.
> >
> > If downstream kernel does not use any upstream platforms (e.g.
> > Exynos5433 or Exynos7) and has its own drivers for everything, then
> > downstream does not even need ARCH_EXYNOS. Just disable it.
>
> As Geert pointed out in another reply, that prevents the use of
> earlyconsole on an exynos SoC + fully modular generic kernel. Are we
> okay with removing the ARCH_EXYNOS dependency on the early console
> driver now?

IMHO not in upstream, as there is no upstream use yet for not having
the dependencies.

Even if there was, I think it is good to have dependencies like
ARCH_EXYNOS, as they let us partition the (19000, as Arnd said recently)
Kconfig symbols into better manageable groups.  Without these, we cannot
do better than "depends on ARM || ARM64 || COMPILE_TEST".

Greg says that's what defconfig files are for, but the arm64 policy is
to have a single defconfig file only.  But thanks to the ARCH_* symbol,
you can take arm64 defconfig, disable the ARCH_* symbols not applicable
to your platform, and have a good start for a config file tailored to
your platform. Note that works for the arm multi_v*_defconfigs, too.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@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 Torvalds

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2021-09-27 19:55 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-20 19:03 [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs Will McVicker
2021-09-20 19:03 ` [PATCH v1 1/4] clk: samsung: change COMMON_CLK_SAMSUNG default config logic Will McVicker
2021-09-21  7:29   ` Krzysztof Kozlowski
2021-09-21  7:50     ` Geert Uytterhoeven
2021-09-21  8:35       ` Krzysztof Kozlowski
2021-09-21 17:58         ` Will McVicker
2021-09-21 18:04           ` Krzysztof Kozlowski
2021-09-23 12:57             ` Lee Jones
2021-09-23 13:27               ` Krzysztof Kozlowski
2021-09-23 14:18                 ` Lee Jones
2021-09-23 16:27                   ` Krzysztof Kozlowski
2021-09-23 16:30                     ` Krzysztof Kozlowski
2021-09-21  7:08 ` [PATCH v1 0/4] arm64: Kconfig: Update ARCH_EXYNOS select configs Lee Jones
2021-09-21  7:19 ` Krzysztof Kozlowski
2021-09-21  7:22   ` Krzysztof Kozlowski
2021-09-21  8:11   ` Lee Jones
2021-09-21  8:25     ` Krzysztof Kozlowski
2021-09-21  8:41       ` Lee Jones
2021-09-25  2:17       ` Saravana Kannan
2021-09-27  8:08         ` Krzysztof Kozlowski
2021-09-27  8:16           ` Geert Uytterhoeven
2021-09-27 18:07           ` Saravana Kannan
2021-09-27 19:54             ` Geert Uytterhoeven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).