linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver
@ 2025-06-20 18:17 Will McVicker
  2025-06-20 18:17 ` [PATCH v4 1/6] of/irq: Export of_irq_count for modules Will McVicker
                   ` (6 more replies)
  0 siblings, 7 replies; 45+ messages in thread
From: Will McVicker @ 2025-06-20 18:17 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Daniel Lezcano, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan
  Cc: Will McVicker, Donghoon Yu, Hosung Kim, kernel-team,
	linux-arm-kernel, linux-kernel, John Stultz, Youngmin Nam,
	Peter Griffin, Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

This series adds support to build the Arm64 Exynos MCT driver as a module.
This is only possible on Arm64 SoCs since they can use the Arm architected
timer as the clocksource. Once the Exynos MCT module is loaded and the
device probes, the MCT is used as the wakeup source for the arch_timer to
ensure the device can wakeup from the "c2" idle state.

These patches are originally from the downstream Pixel 6 (gs101) kernel
found at [1] and have been adapted for upstream. Not only has the Exynos MCT
driver been shipping as a module in the field with Android, but I've also
tested this series with the upstream kernel on my Pixel 6 Pro.

In addition, I verified that the Exynos MCT module cannot be unloaded on my
Pixel 6. This is due to /sys/module/exynos_mct/refcnt > 0. So if you try,
you'll get this:

  root@google-gs:~# rmmod exynos_mct
  rmmod: ERROR: Module exynos_mct is in use
  root@google-gs:~# cat /sys/module/exynos_mct/refcnt
  9

Thanks,
Will

Note1, instructions to build and flash a Pixel 6 device with the upstream
kernel can be found at [2].

Note2, this series is based off of krzk/for-next commit a15edf91668b ("Merge
branch 'next/dt64' into for-next") with [3] on top.

[1] https://android.googlesource.com/kernel/gs/+log/refs/heads/android-gs-raviole-5.10-android12-d1
[2] https://git.codelinaro.org/linaro/googlelt/pixelscripts/-/blob/clo/main/README.md?ref_type=heads
[3] https://lore.kernel.org/linux-arm-kernel/20250602151853.1942521-1-daniel.lezcano@linaro.org/

Cc: Alim Akhtar <alim.akhtar@samsung.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Donghoon Yu <hoony.yu@samsung.com>
Cc: Hosung Kim <hosung0.kim@samsung.com>
Cc: kernel-team@android.com
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: Rob Herring <robh@kernel.org>
Cc: Saravana Kannan <saravanak@google.com>
Cc: John Stultz <jstultz@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Youngmin Nam <youngmin.nam@samsung.com>
Cc: Peter Griffin <peter.griffin@linaro.org>
Cc: Tudor Ambarus <tudor.ambarus@linaro.org>
Cc: André Draszik <andre.draszik@linaro.org>
Cc: Will Deacon <will@kernel.org>
Cc: Conor Dooley <conor+dt@kernel.org>
Cc: Krzysztof Kozlowski <krzk@kernel.org>
Cc: linux-samsung-soc@vger.kernel.org

---
Changes in v4:
- Missed the "v3" string in the previous series for the actual patches
- Re-generated patches with --base a15edf91668beefdb5171c53fa698c9b43dd1e0d
  for kernel test robot.

Changes in v3:
- Rebased on top of Daniel's timer modularization prep series [3] and
  krzk/for-next commit a15edf91668b ("Merge branch 'next/dt64' into
  for-next")
- Added owner references to Exynos MCT clocksource and clockevent objects.
- Dropped #ifdef MODULE conditional section in favor of just using
  module_platform_driver() which will properly handle setting up the
  of_device_id table based on if the driver is built-in or a module.
- Update commit message for patch 2 based on John's feedback.
- Dropped DT change from v2 as it was picked up by Krzysztof for CPU Idle.

Changes in v2:
- Re-worked patch v1 5 based on Rob Herring's review to use the compatible
  data for retrieving the mct_init function pointer.
- Updated the Kconfig logic to disallow building the Exynos MCT driver as
  a module for ARM32 configurations based on Krzysztof Kozlowski's findings.
- Added comments and clarified commit messages in patches 1 and 2 based on
  reviews from John Stultz and Youngmin Nam.
- Fixed an issue found during testing that resulted in the device getting
  stuck on boot. This is included in v2 as patch 5.
- Collected *-by tags
- Rebased to the latest linux-next/master.
---
 

Donghoon Yu (1):
  clocksource/drivers/exynos_mct: Add module support

Hosung Kim (1):
  clocksource/drivers/exynos_mct: Set local timer interrupts as percpu

Will McVicker (4):
  of/irq: Export of_irq_count for modules
  clocksource/drivers/exynos_mct: Don't register as a sched_clock on
    arm64
  clocksource/drivers/exynos_mct: Fix uninitialized irq name warning
  arm64: exynos: Drop select CLKSRC_EXYNOS_MCT

 arch/arm64/Kconfig.platforms     |  1 -
 drivers/clocksource/Kconfig      |  3 +-
 drivers/clocksource/exynos_mct.c | 75 ++++++++++++++++++++++++++------
 drivers/of/irq.c                 |  1 +
 4 files changed, 64 insertions(+), 16 deletions(-)


base-commit: a15edf91668beefdb5171c53fa698c9b43dd1e0d
prerequisite-patch-id: 0c5b7e9fb27295e0c125c537ac80d1eb16cef60d
prerequisite-patch-id: 6a9b683baee83ddc2b2fada31479b27b53469759
prerequisite-patch-id: b9cbd59ff2f4c905001ecb02868d20fb004034cc
prerequisite-patch-id: cdde1a76624089aa818cb35e612f880107bdc073
prerequisite-patch-id: cec67e07038c7aa93a2b53879781626d738cd199
prerequisite-patch-id: 8fda377fcaf407026f04f2a547086cf1ecf4efc9
prerequisite-patch-id: dce925ac224bb361c74fdb23126fab53e7c5c26b
-- 
2.50.0.rc2.761.g2dc52ea45b-goog


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

* [PATCH v4 1/6] of/irq: Export of_irq_count for modules
  2025-06-20 18:17 [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Will McVicker
@ 2025-06-20 18:17 ` Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
  2025-07-25 10:31   ` [tip: timers/clocksource] of/irq: Export of_irq_count() " tip-bot2 for Will McVicker
  2025-06-20 18:17 ` [PATCH v4 2/6] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64 Will McVicker
                   ` (5 subsequent siblings)
  6 siblings, 2 replies; 45+ messages in thread
From: Will McVicker @ 2025-06-20 18:17 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Daniel Lezcano, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan
  Cc: Will McVicker, Donghoon Yu, Hosung Kim, kernel-team,
	linux-arm-kernel, linux-kernel, John Stultz, Youngmin Nam,
	Peter Griffin, Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree, Arnd Bergmann, Linus Walleij

Need to export `of_irq_count` in preparation for modularizing the Exynos
MCT driver which uses this API for setting up the timer IRQs.

Acked-by: Rob Herring (Arm) <robh@kernel.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Linus Walleij <linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
---
 drivers/of/irq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index f8ad79b9b1c9..5adda1dac3cf 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -519,6 +519,7 @@ int of_irq_count(struct device_node *dev)
 
 	return nr;
 }
+EXPORT_SYMBOL_GPL(of_irq_count);
 
 /**
  * of_irq_to_resource_table - Fill in resource table with node's IRQ info
-- 
2.50.0.rc2.761.g2dc52ea45b-goog


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

* [PATCH v4 2/6] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-06-20 18:17 [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Will McVicker
  2025-06-20 18:17 ` [PATCH v4 1/6] of/irq: Export of_irq_count for modules Will McVicker
@ 2025-06-20 18:17 ` Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
  2025-07-25 10:31   ` tip-bot2 for Donghoon Yu
  2025-06-20 18:17 ` [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu Will McVicker
                   ` (4 subsequent siblings)
  6 siblings, 2 replies; 45+ messages in thread
From: Will McVicker @ 2025-06-20 18:17 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Daniel Lezcano, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan
  Cc: Will McVicker, Donghoon Yu, Hosung Kim, kernel-team,
	linux-arm-kernel, linux-kernel, John Stultz, Youngmin Nam,
	Peter Griffin, Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

The MCT register is unfortunately very slow to access, but importantly
does not halt in the c2 idle state. So for ARM64, we can improve
performance by not registering the MCT for sched_clock, allowing the
system to use the faster ARM architected timer for sched_clock instead.

The MCT is still registered as a clocksource, and a clockevent in order
to be a wakeup source for the arch_timer to exit the "c2" idle state.

Since ARM32 SoCs don't have an architected timer, the MCT must continue
to be used for sched_clock. Detailed discussion on this topic can be
found at [1].

[1] https://lore.kernel.org/linux-samsung-soc/1400188079-21832-1-git-send-email-chirantan@chromium.org/

[Original commit from https://android.googlesource.com/kernel/gs/+/630817f7080e92c5e0216095ff52f6eb8dd00727

Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Acked-by: John Stultz <jstultz@google.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
---
 drivers/clocksource/exynos_mct.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index da09f467a6bb..96361d5dc57d 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -219,12 +219,18 @@ static struct clocksource mct_frc = {
 	.resume		= exynos4_frc_resume,
 };
 
+/*
+ * Since ARM devices do not have an architected timer, they need to continue
+ * using the MCT as the main clocksource for timekeeping, sched_clock, and the
+ * delay timer. For AARCH64 SoCs, the architected timer is the preferred
+ * clocksource due to it's superior performance.
+ */
+#if defined(CONFIG_ARM)
 static u64 notrace exynos4_read_sched_clock(void)
 {
 	return exynos4_read_count_32();
 }
 
-#if defined(CONFIG_ARM)
 static struct delay_timer exynos4_delay_timer;
 
 static cycles_t exynos4_read_current_timer(void)
@@ -250,12 +256,13 @@ static int __init exynos4_clocksource_init(bool frc_shared)
 	exynos4_delay_timer.read_current_timer = &exynos4_read_current_timer;
 	exynos4_delay_timer.freq = clk_rate;
 	register_current_timer_delay(&exynos4_delay_timer);
+
+	sched_clock_register(exynos4_read_sched_clock, 32, clk_rate);
 #endif
 
 	if (clocksource_register_hz(&mct_frc, clk_rate))
 		panic("%s: can't register clocksource\n", mct_frc.name);
 
-	sched_clock_register(exynos4_read_sched_clock, 32, clk_rate);
 
 	return 0;
 }
-- 
2.50.0.rc2.761.g2dc52ea45b-goog


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

* [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu
  2025-06-20 18:17 [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Will McVicker
  2025-06-20 18:17 ` [PATCH v4 1/6] of/irq: Export of_irq_count for modules Will McVicker
  2025-06-20 18:17 ` [PATCH v4 2/6] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64 Will McVicker
@ 2025-06-20 18:17 ` Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Hosung Kim
                     ` (2 more replies)
  2025-06-20 18:17 ` [PATCH v4 4/6] clocksource/drivers/exynos_mct: Fix uninitialized irq name warning Will McVicker
                   ` (3 subsequent siblings)
  6 siblings, 3 replies; 45+ messages in thread
From: Will McVicker @ 2025-06-20 18:17 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Daniel Lezcano, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan
  Cc: Will McVicker, Donghoon Yu, Hosung Kim, kernel-team,
	linux-arm-kernel, linux-kernel, John Stultz, Youngmin Nam,
	Peter Griffin, Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

From: Hosung Kim <hosung0.kim@samsung.com>

To allow the CPU to handle it's own clock events, we need to set the
IRQF_PERCPU flag. This prevents the local timer interrupts from
migrating to other CPUs.

Signed-off-by: Hosung Kim <hosung0.kim@samsung.com>
[Original commit from https://android.googlesource.com/kernel/gs/+/03267fad19f093bac979ca78309483e9eb3a8d16]
Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
---
 drivers/clocksource/exynos_mct.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 96361d5dc57d..a5ef7d64b1c2 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -596,7 +596,8 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
 			irq_set_status_flags(mct_irq, IRQ_NOAUTOEN);
 			if (request_irq(mct_irq,
 					exynos4_mct_tick_isr,
-					IRQF_TIMER | IRQF_NOBALANCING,
+					IRQF_TIMER | IRQF_NOBALANCING |
+					IRQF_PERCPU,
 					pcpu_mevt->name, pcpu_mevt)) {
 				pr_err("exynos-mct: cannot register IRQ (cpu%d)\n",
 									cpu);
-- 
2.50.0.rc2.761.g2dc52ea45b-goog


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

* [PATCH v4 4/6] clocksource/drivers/exynos_mct: Fix uninitialized irq name warning
  2025-06-20 18:17 [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Will McVicker
                   ` (2 preceding siblings ...)
  2025-06-20 18:17 ` [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu Will McVicker
@ 2025-06-20 18:17 ` Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
  2025-07-25 10:31   ` [tip: timers/clocksource] clocksource/drivers/exynos_mct: Fix uninitialized IRQ " tip-bot2 for Will McVicker
  2025-06-20 18:17 ` [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support Will McVicker
                   ` (2 subsequent siblings)
  6 siblings, 2 replies; 45+ messages in thread
From: Will McVicker @ 2025-06-20 18:17 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Daniel Lezcano, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan
  Cc: Will McVicker, Donghoon Yu, Hosung Kim, kernel-team,
	linux-arm-kernel, linux-kernel, John Stultz, Youngmin Nam,
	Peter Griffin, Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

The Exynos MCT driver doesn't set the clocksource name until the CPU
hotplug state is setup which happens after the IRQs are requested. This
results in an empty IRQ name which leads to the below warning at
proc_create() time. When this happens, the userdata partition fails to
mount and the device gets stuck in an endless loop printing the error:

  root '/dev/disk/by-partlabel/userdata' doesn't exist or does not contain a /dev.

To fix this, we just need to initialize the name before requesting the
IRQs.

Warning from Pixel 6 kernel log:

[  T430] name len 0
[  T430] WARNING: CPU: 6 PID: 430 at fs/proc/generic.c:407 __proc_create+0x258/0x2b4
[  T430] Modules linked in: dwc3_exynos(E+)
[  T430]  ufs_exynos(E+) phy_exynos_ufs(E)
[  T430]  phy_exynos5_usbdrd(E) exynos_usi(E+) exynos_mct(E+) s3c2410_wdt(E)
[  T430]  arm_dsu_pmu(E) simplefb(E)
[  T430] CPU: 6 UID: 0 PID: 430 Comm: (udev-worker) Tainted:
         ... 6.14.0-next-20250331-4k-00008-g59adf909e40e #1 ...
[  T430] Tainted: [W]=WARN, [E]=UNSIGNED_MODULE
[  T430] Hardware name: Raven (DT)
[...]
[  T430] Call trace:
[  T430]  __proc_create+0x258/0x2b4 (P)
[  T430]  proc_mkdir+0x40/0xa0
[  T430]  register_handler_proc+0x118/0x140
[  T430]  __setup_irq+0x460/0x6d0
[  T430]  request_threaded_irq+0xcc/0x1b0
[  T430]  mct_init_dt+0x244/0x604 [exynos_mct ...]
[  T430]  mct_init_spi+0x18/0x34 [exynos_mct ...]
[  T430]  exynos4_mct_probe+0x30/0x4c [exynos_mct ...]
[  T430]  platform_probe+0x6c/0xe4
[  T430]  really_probe+0xf4/0x38c
[...]
[  T430]  driver_register+0x6c/0x140
[  T430]  __platform_driver_register+0x28/0x38
[  T430]  exynos4_mct_driver_init+0x24/0xfe8 [exynos_mct ...]
[  T430]  do_one_initcall+0x84/0x3c0
[  T430]  do_init_module+0x58/0x208
[  T430]  load_module+0x1de0/0x2500
[  T430]  init_module_from_file+0x8c/0xdc

Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
---
 drivers/clocksource/exynos_mct.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index a5ef7d64b1c2..62febeb4e1de 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -465,8 +465,6 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
 		per_cpu_ptr(&percpu_mct_tick, cpu);
 	struct clock_event_device *evt = &mevt->evt;
 
-	snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d", cpu);
-
 	evt->name = mevt->name;
 	evt->cpumask = cpumask_of(cpu);
 	evt->set_next_event = exynos4_tick_set_next_event;
@@ -567,6 +565,14 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
 	for (i = MCT_L0_IRQ; i < nr_irqs; i++)
 		mct_irqs[i] = irq_of_parse_and_map(np, i);
 
+	for_each_possible_cpu(cpu) {
+		struct mct_clock_event_device *mevt =
+		    per_cpu_ptr(&percpu_mct_tick, cpu);
+
+		snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d",
+			 cpu);
+	}
+
 	if (mct_int_type == MCT_INT_PPI) {
 
 		err = request_percpu_irq(mct_irqs[MCT_L0_IRQ],
-- 
2.50.0.rc2.761.g2dc52ea45b-goog


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

* [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support
  2025-06-20 18:17 [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Will McVicker
                   ` (3 preceding siblings ...)
  2025-06-20 18:17 ` [PATCH v4 4/6] clocksource/drivers/exynos_mct: Fix uninitialized irq name warning Will McVicker
@ 2025-06-20 18:17 ` Will McVicker
  2025-06-24 13:48   ` Daniel Lezcano
                     ` (4 more replies)
  2025-06-20 18:17 ` [PATCH v4 6/6] arm64: exynos: Drop select CLKSRC_EXYNOS_MCT Will McVicker
  2025-07-15 11:03 ` [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Daniel Lezcano
  6 siblings, 5 replies; 45+ messages in thread
From: Will McVicker @ 2025-06-20 18:17 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Daniel Lezcano, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan
  Cc: Will McVicker, Donghoon Yu, Hosung Kim, kernel-team,
	linux-arm-kernel, linux-kernel, John Stultz, Youngmin Nam,
	Peter Griffin, Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

From: Donghoon Yu <hoony.yu@samsung.com>

On Arm64 platforms the Exynos MCT driver can be built as a module. On
boot (and even after boot) the arch_timer is used as the clocksource and
tick timer. Once the MCT driver is loaded, it can be used as the wakeup
source for the arch_timer.

Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
[original commit from https://android.googlesource.com/kernel/gs/+/8a52a8288ec7d88ff78f0b37480dbb0e9c65bbfd]
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
---
 drivers/clocksource/Kconfig      |  3 +-
 drivers/clocksource/exynos_mct.c | 51 ++++++++++++++++++++++++++------
 2 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 645f517a1ac2..d657c8ddc96b 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -451,7 +451,8 @@ config ATMEL_TCB_CLKSRC
 	  Support for Timer Counter Blocks on Atmel SoCs.
 
 config CLKSRC_EXYNOS_MCT
-	bool "Exynos multi core timer driver" if COMPILE_TEST
+	tristate "Exynos multi core timer driver" if ARM64
+	default y if ARCH_EXYNOS || COMPILE_TEST
 	depends on ARM || ARM64
 	depends on ARCH_ARTPEC || ARCH_EXYNOS || COMPILE_TEST
 	help
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 62febeb4e1de..5075ebe052a7 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -15,9 +15,11 @@
 #include <linux/cpu.h>
 #include <linux/delay.h>
 #include <linux/percpu.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_irq.h>
 #include <linux/of_address.h>
+#include <linux/platform_device.h>
 #include <linux/clocksource.h>
 #include <linux/sched_clock.h>
 
@@ -217,6 +219,7 @@ static struct clocksource mct_frc = {
 	.mask		= CLOCKSOURCE_MASK(32),
 	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
 	.resume		= exynos4_frc_resume,
+	.owner		= THIS_MODULE,
 };
 
 /*
@@ -241,7 +244,7 @@ static cycles_t exynos4_read_current_timer(void)
 }
 #endif
 
-static int __init exynos4_clocksource_init(bool frc_shared)
+static int exynos4_clocksource_init(bool frc_shared)
 {
 	/*
 	 * When the frc is shared, the main processor should have already
@@ -336,6 +339,7 @@ static struct clock_event_device mct_comp_device = {
 	.set_state_oneshot	= mct_set_state_shutdown,
 	.set_state_oneshot_stopped = mct_set_state_shutdown,
 	.tick_resume		= mct_set_state_shutdown,
+	.owner			= THIS_MODULE,
 };
 
 static irqreturn_t exynos4_mct_comp_isr(int irq, void *dev_id)
@@ -476,6 +480,7 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
 	evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT |
 			CLOCK_EVT_FEAT_PERCPU;
 	evt->rating = MCT_CLKEVENTS_RATING;
+	evt->owner = THIS_MODULE;
 
 	exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
 
@@ -511,7 +516,7 @@ static int exynos4_mct_dying_cpu(unsigned int cpu)
 	return 0;
 }
 
-static int __init exynos4_timer_resources(struct device_node *np)
+static int exynos4_timer_resources(struct device_node *np)
 {
 	struct clk *mct_clk, *tick_clk;
 
@@ -539,7 +544,7 @@ static int __init exynos4_timer_resources(struct device_node *np)
  * @local_idx: array mapping CPU numbers to local timer indices
  * @nr_local: size of @local_idx array
  */
-static int __init exynos4_timer_interrupts(struct device_node *np,
+static int exynos4_timer_interrupts(struct device_node *np,
 					   unsigned int int_type,
 					   const u32 *local_idx,
 					   size_t nr_local)
@@ -652,7 +657,7 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
 	return err;
 }
 
-static int __init mct_init_dt(struct device_node *np, unsigned int int_type)
+static int mct_init_dt(struct device_node *np, unsigned int int_type)
 {
 	bool frc_shared = of_property_read_bool(np, "samsung,frc-shared");
 	u32 local_idx[MCT_NR_LOCAL] = {0};
@@ -700,15 +705,43 @@ static int __init mct_init_dt(struct device_node *np, unsigned int int_type)
 	return exynos4_clockevent_init();
 }
 
-
-static int __init mct_init_spi(struct device_node *np)
+static int mct_init_spi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_SPI);
 }
 
-static int __init mct_init_ppi(struct device_node *np)
+static int mct_init_ppi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_PPI);
 }
-TIMER_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
-TIMER_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
+
+static int exynos4_mct_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	int (*mct_init)(struct device_node *np);
+
+	mct_init = of_device_get_match_data(dev);
+	if (!mct_init)
+		return -EINVAL;
+
+	return mct_init(dev->of_node);
+}
+
+static const struct of_device_id exynos4_mct_match_table[] = {
+	{ .compatible = "samsung,exynos4210-mct", .data = &mct_init_spi, },
+	{ .compatible = "samsung,exynos4412-mct", .data = &mct_init_ppi, },
+	{}
+};
+MODULE_DEVICE_TABLE(of, exynos4_mct_match_table);
+
+static struct platform_driver exynos4_mct_driver = {
+	.probe		= exynos4_mct_probe,
+	.driver		= {
+		.name	= "exynos-mct",
+		.of_match_table = exynos4_mct_match_table,
+	},
+};
+module_platform_driver(exynos4_mct_driver);
+
+MODULE_DESCRIPTION("Exynos Multi Core Timer Driver");
+MODULE_LICENSE("GPL");
-- 
2.50.0.rc2.761.g2dc52ea45b-goog


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

* [PATCH v4 6/6] arm64: exynos: Drop select CLKSRC_EXYNOS_MCT
  2025-06-20 18:17 [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Will McVicker
                   ` (4 preceding siblings ...)
  2025-06-20 18:17 ` [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support Will McVicker
@ 2025-06-20 18:17 ` Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
  2025-07-25 10:31   ` tip-bot2 for Will McVicker
  2025-07-15 11:03 ` [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Daniel Lezcano
  6 siblings, 2 replies; 45+ messages in thread
From: Will McVicker @ 2025-06-20 18:17 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Daniel Lezcano, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan
  Cc: Will McVicker, Donghoon Yu, Hosung Kim, kernel-team,
	linux-arm-kernel, linux-kernel, John Stultz, Youngmin Nam,
	Peter Griffin, Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

Since the Exynos MCT driver can be built as a module for some Arm64 SoCs
like gs101, drop force-selecting it as a built-in driver by ARCH_EXYNOS
and instead depend on `default y if ARCH_EXYNOS` to select it
automatically. This allows platforms like Android to build the driver as
a module if desired.

Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
---
 arch/arm64/Kconfig.platforms | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
index a541bb029aa4..46825b02d099 100644
--- a/arch/arm64/Kconfig.platforms
+++ b/arch/arm64/Kconfig.platforms
@@ -109,7 +109,6 @@ config ARCH_BLAIZE
 config ARCH_EXYNOS
 	bool "Samsung Exynos SoC family"
 	select COMMON_CLK_SAMSUNG
-	select CLKSRC_EXYNOS_MCT
 	select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS
 	select EXYNOS_PMU
 	select PINCTRL
-- 
2.50.0.rc2.761.g2dc52ea45b-goog


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

* Re: [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support
  2025-06-20 18:17 ` [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support Will McVicker
@ 2025-06-24 13:48   ` Daniel Lezcano
  2025-06-24 23:47     ` William McVicker
  2025-07-15 12:18   ` [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion Daniel Lezcano
                     ` (3 subsequent siblings)
  4 siblings, 1 reply; 45+ messages in thread
From: Daniel Lezcano @ 2025-06-24 13:48 UTC (permalink / raw)
  To: Will McVicker
  Cc: Catalin Marinas, Will Deacon, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan,
	Donghoon Yu, Hosung Kim, kernel-team, linux-arm-kernel,
	linux-kernel, John Stultz, Youngmin Nam, Peter Griffin,
	Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

On Fri, Jun 20, 2025 at 11:17:08AM -0700, Will McVicker wrote:
> From: Donghoon Yu <hoony.yu@samsung.com>
> 
> On Arm64 platforms the Exynos MCT driver can be built as a module. On
> boot (and even after boot) the arch_timer is used as the clocksource and
> tick timer. Once the MCT driver is loaded, it can be used as the wakeup
> source for the arch_timer.
> 
> Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> [original commit from https://android.googlesource.com/kernel/gs/+/8a52a8288ec7d88ff78f0b37480dbb0e9c65bbfd]
> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
> Signed-off-by: Will McVicker <willmcvicker@google.com>
> ---

...

> -static int __init mct_init_spi(struct device_node *np)

__init_or_module

> +static int mct_init_spi(struct device_node *np)
>  {
>  	return mct_init_dt(np, MCT_INT_SPI);
>  }
>  
> -static int __init mct_init_ppi(struct device_node *np)
> +static int mct_init_ppi(struct device_node *np)
>  {
>  	return mct_init_dt(np, MCT_INT_PPI);
>  }
> -TIMER_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
> -TIMER_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);

Are you sure this is not going to hurt the ARM platforms ? Here the
timer is enabled very early in the boot process while with this change
the timer will be available later.

> +static int exynos4_mct_probe(struct platform_device *pdev)
> +{
> +	struct device *dev = &pdev->dev;
> +	int (*mct_init)(struct device_node *np);
> +
> +	mct_init = of_device_get_match_data(dev);
> +	if (!mct_init)
> +		return -EINVAL;
> +
> +	return mct_init(dev->of_node);
> +}
> +
> +static const struct of_device_id exynos4_mct_match_table[] = {
> +	{ .compatible = "samsung,exynos4210-mct", .data = &mct_init_spi, },
> +	{ .compatible = "samsung,exynos4412-mct", .data = &mct_init_ppi, },
> +	{}
> +};
> +MODULE_DEVICE_TABLE(of, exynos4_mct_match_table);
> +
> +static struct platform_driver exynos4_mct_driver = {
> +	.probe		= exynos4_mct_probe,
> +	.driver		= {
> +		.name	= "exynos-mct",
> +		.of_match_table = exynos4_mct_match_table,
> +	},
> +};
> +module_platform_driver(exynos4_mct_driver);
> +
> +MODULE_DESCRIPTION("Exynos Multi Core Timer Driver");
> +MODULE_LICENSE("GPL");
> -- 
> 2.50.0.rc2.761.g2dc52ea45b-goog
> 

-- 

 <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* Re: [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support
  2025-06-24 13:48   ` Daniel Lezcano
@ 2025-06-24 23:47     ` William McVicker
  2025-06-25  9:23       ` Daniel Lezcano
  0 siblings, 1 reply; 45+ messages in thread
From: William McVicker @ 2025-06-24 23:47 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: Catalin Marinas, Will Deacon, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan,
	Donghoon Yu, Hosung Kim, kernel-team, linux-arm-kernel,
	linux-kernel, John Stultz, Youngmin Nam, Peter Griffin,
	Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

On 06/24/2025, Daniel Lezcano wrote:
> On Fri, Jun 20, 2025 at 11:17:08AM -0700, Will McVicker wrote:
> > From: Donghoon Yu <hoony.yu@samsung.com>
> > 
> > On Arm64 platforms the Exynos MCT driver can be built as a module. On
> > boot (and even after boot) the arch_timer is used as the clocksource and
> > tick timer. Once the MCT driver is loaded, it can be used as the wakeup
> > source for the arch_timer.
> > 
> > Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
> > Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> > [original commit from https://android.googlesource.com/kernel/gs/+/8a52a8288ec7d88ff78f0b37480dbb0e9c65bbfd]
> > Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> > Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
> > Signed-off-by: Will McVicker <willmcvicker@google.com>
> > ---
> 
> ...
> 
> > -static int __init mct_init_spi(struct device_node *np)
> 
> __init_or_module

Thanks, I'll update in v5.

> 
> > +static int mct_init_spi(struct device_node *np)
> >  {
> >  	return mct_init_dt(np, MCT_INT_SPI);
> >  }
> >  
> > -static int __init mct_init_ppi(struct device_node *np)
> > +static int mct_init_ppi(struct device_node *np)
> >  {
> >  	return mct_init_dt(np, MCT_INT_PPI);
> >  }
> > -TIMER_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
> > -TIMER_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
> 
> Are you sure this is not going to hurt the ARM platforms ? Here the
> timer is enabled very early in the boot process while with this change
> the timer will be available later.

I took a second look at the TIMER_OF_DECLARE() macro and FWICT the timer will
only be enabled "very early" via timer_probe() if "MODULE" is not defined which
is only defined when this specific driver is compiled as a module. Note, this
"MODULE" define is not the same as the Kconfig option "CONFIG_MODULES".
That is why in my v1 and v2 patch [1] I had:

 #ifdef MODULE
   ...
   module_platform_driver(exynos4_mct_driver);
 #else
   TIMER_OF_DECLARE(...)
   TIMER_OF_DECLARE(...)
 #endif

However, I dropped that since Saravana mentioned that we should not be using
TIMER_OF_DECLARE() for drivers that can be modules. I don't have an ARM Exynos
device to verify dropping TIMER_OF_DECLARE() is safe. So if you and Saravana
agree, I can work on creating a patch to define TIMER_OF_DECLARE_MODULE() like
you proposed in [2] to handle this for all the drivers that are used for both ARM and
ARM64 SoCs.

Thanks,
Will

[1] https://lore.kernel.org/all/6e6b0f5f-ac60-48bb-af6c-fa58658d2639@linaro.org/
[2] https://lore.kernel.org/all/f2f914aa-c554-4135-afaa-f075537ed929@linaro.org/

<snip>

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

* Re: [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support
  2025-06-24 23:47     ` William McVicker
@ 2025-06-25  9:23       ` Daniel Lezcano
  0 siblings, 0 replies; 45+ messages in thread
From: Daniel Lezcano @ 2025-06-25  9:23 UTC (permalink / raw)
  To: William McVicker
  Cc: Catalin Marinas, Will Deacon, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan,
	Donghoon Yu, Hosung Kim, kernel-team, linux-arm-kernel,
	linux-kernel, John Stultz, Youngmin Nam, Peter Griffin,
	Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree


Hi Will,

sorry I missed to add you in Cc but the following proposal help in the 
module conversion:

https://lore.kernel.org/all/20250625085715.889837-1-daniel.lezcano@linaro.org/


On 25/06/2025 01:47, William McVicker wrote:
> On 06/24/2025, Daniel Lezcano wrote:
>> On Fri, Jun 20, 2025 at 11:17:08AM -0700, Will McVicker wrote:
>>> From: Donghoon Yu <hoony.yu@samsung.com>
>>>
>>> On Arm64 platforms the Exynos MCT driver can be built as a module. On
>>> boot (and even after boot) the arch_timer is used as the clocksource and
>>> tick timer. Once the MCT driver is loaded, it can be used as the wakeup
>>> source for the arch_timer.
>>>
>>> Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
>>> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
>>> [original commit from https://android.googlesource.com/kernel/gs/+/8a52a8288ec7d88ff78f0b37480dbb0e9c65bbfd]
>>> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
>>> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
>>> Signed-off-by: Will McVicker <willmcvicker@google.com>
>>> ---
>>
>> ...
>>
>>> -static int __init mct_init_spi(struct device_node *np)
>>
>> __init_or_module
> 
> Thanks, I'll update in v5.
> 
>>
>>> +static int mct_init_spi(struct device_node *np)
>>>   {
>>>   	return mct_init_dt(np, MCT_INT_SPI);
>>>   }
>>>   
>>> -static int __init mct_init_ppi(struct device_node *np)
>>> +static int mct_init_ppi(struct device_node *np)
>>>   {
>>>   	return mct_init_dt(np, MCT_INT_PPI);
>>>   }
>>> -TIMER_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
>>> -TIMER_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
>>
>> Are you sure this is not going to hurt the ARM platforms ? Here the
>> timer is enabled very early in the boot process while with this change
>> the timer will be available later.
> 
> I took a second look at the TIMER_OF_DECLARE() macro and FWICT the timer will
> only be enabled "very early" via timer_probe() if "MODULE" is not defined which
> is only defined when this specific driver is compiled as a module. Note, this
> "MODULE" define is not the same as the Kconfig option "CONFIG_MODULES".
> That is why in my v1 and v2 patch [1] I had:
> 
>   #ifdef MODULE
>     ...
>     module_platform_driver(exynos4_mct_driver);
>   #else
>     TIMER_OF_DECLARE(...)
>     TIMER_OF_DECLARE(...)
>   #endif
> 
> However, I dropped that since Saravana mentioned that we should not be using
> TIMER_OF_DECLARE() for drivers that can be modules. I don't have an ARM Exynos
> device to verify dropping TIMER_OF_DECLARE() is safe. So if you and Saravana
> agree, I can work on creating a patch to define TIMER_OF_DECLARE_MODULE() like
> you proposed in [2] to handle this for all the drivers that are used for both ARM and
> ARM64 SoCs.
> 
> Thanks,
> Will
> 
> [1] https://lore.kernel.org/all/6e6b0f5f-ac60-48bb-af6c-fa58658d2639@linaro.org/
> [2] https://lore.kernel.org/all/f2f914aa-c554-4135-afaa-f075537ed929@linaro.org/
> 
> <snip>


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* Re: [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver
  2025-06-20 18:17 [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Will McVicker
                   ` (5 preceding siblings ...)
  2025-06-20 18:17 ` [PATCH v4 6/6] arm64: exynos: Drop select CLKSRC_EXYNOS_MCT Will McVicker
@ 2025-07-15 11:03 ` Daniel Lezcano
  6 siblings, 0 replies; 45+ messages in thread
From: Daniel Lezcano @ 2025-07-15 11:03 UTC (permalink / raw)
  To: Will McVicker
  Cc: Catalin Marinas, Will Deacon, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan,
	Donghoon Yu, Hosung Kim, kernel-team, linux-arm-kernel,
	linux-kernel, John Stultz, Youngmin Nam, Peter Griffin,
	Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree

On Fri, Jun 20, 2025 at 11:17:03AM -0700, Will McVicker wrote:
> This series adds support to build the Arm64 Exynos MCT driver as a module.
> This is only possible on Arm64 SoCs since they can use the Arm architected
> timer as the clocksource. Once the Exynos MCT module is loaded and the
> device probes, the MCT is used as the wakeup source for the arch_timer to
> ensure the device can wakeup from the "c2" idle state.
> 
> These patches are originally from the downstream Pixel 6 (gs101) kernel
> found at [1] and have been adapted for upstream. Not only has the Exynos MCT
> driver been shipping as a module in the field with Android, but I've also
> tested this series with the upstream kernel on my Pixel 6 Pro.
> 
> In addition, I verified that the Exynos MCT module cannot be unloaded on my
> Pixel 6. This is due to /sys/module/exynos_mct/refcnt > 0. So if you try,
> you'll get this:
> 
>   root@google-gs:~# rmmod exynos_mct
>   rmmod: ERROR: Module exynos_mct is in use
>   root@google-gs:~# cat /sys/module/exynos_mct/refcnt
>   9
> 
> Thanks,
> Will
> 
> Note1, instructions to build and flash a Pixel 6 device with the upstream
> kernel can be found at [2].
> 
> Note2, this series is based off of krzk/for-next commit a15edf91668b ("Merge
> branch 'next/dt64' into for-next") with [3] on top.
> 
> [1] https://android.googlesource.com/kernel/gs/+log/refs/heads/android-gs-raviole-5.10-android12-d1
> [2] https://git.codelinaro.org/linaro/googlelt/pixelscripts/-/blob/clo/main/README.md?ref_type=heads
> [3] https://lore.kernel.org/linux-arm-kernel/20250602151853.1942521-1-daniel.lezcano@linaro.org/
> 
> Cc: Alim Akhtar <alim.akhtar@samsung.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Donghoon Yu <hoony.yu@samsung.com>
> Cc: Hosung Kim <hosung0.kim@samsung.com>
> Cc: kernel-team@android.com
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-kernel@vger.kernel.org
> Cc: Rob Herring <robh@kernel.org>
> Cc: Saravana Kannan <saravanak@google.com>
> Cc: John Stultz <jstultz@google.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Youngmin Nam <youngmin.nam@samsung.com>
> Cc: Peter Griffin <peter.griffin@linaro.org>
> Cc: Tudor Ambarus <tudor.ambarus@linaro.org>
> Cc: André Draszik <andre.draszik@linaro.org>
> Cc: Will Deacon <will@kernel.org>
> Cc: Conor Dooley <conor+dt@kernel.org>
> Cc: Krzysztof Kozlowski <krzk@kernel.org>
> Cc: linux-samsung-soc@vger.kernel.org
> 
> ---
> Changes in v4:
> - Missed the "v3" string in the previous series for the actual patches
> - Re-generated patches with --base a15edf91668beefdb5171c53fa698c9b43dd1e0d
>   for kernel test robot.
> 
> Changes in v3:
> - Rebased on top of Daniel's timer modularization prep series [3] and
>   krzk/for-next commit a15edf91668b ("Merge branch 'next/dt64' into
>   for-next")
> - Added owner references to Exynos MCT clocksource and clockevent objects.
> - Dropped #ifdef MODULE conditional section in favor of just using
>   module_platform_driver() which will properly handle setting up the
>   of_device_id table based on if the driver is built-in or a module.
> - Update commit message for patch 2 based on John's feedback.
> - Dropped DT change from v2 as it was picked up by Krzysztof for CPU Idle.
> 
> Changes in v2:
> - Re-worked patch v1 5 based on Rob Herring's review to use the compatible
>   data for retrieving the mct_init function pointer.
> - Updated the Kconfig logic to disallow building the Exynos MCT driver as
>   a module for ARM32 configurations based on Krzysztof Kozlowski's findings.
> - Added comments and clarified commit messages in patches 1 and 2 based on
>   reviews from John Stultz and Youngmin Nam.
> - Fixed an issue found during testing that resulted in the device getting
>   stuck on boot. This is included in v2 as patch 5.
> - Collected *-by tags
> - Rebased to the latest linux-next/master.
> ---

Applied, thanks

  -- Daniel

-- 

 <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion
  2025-06-20 18:17 ` [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support Will McVicker
  2025-06-24 13:48   ` Daniel Lezcano
@ 2025-07-15 12:18   ` Daniel Lezcano
  2025-07-15 17:23     ` William McVicker
                       ` (4 more replies)
  2025-07-23  7:17   ` [tip: timers/clocksource] clocksource/drivers/exynos_mct: Add module support tip-bot2 for Donghoon Yu
                     ` (2 subsequent siblings)
  4 siblings, 5 replies; 45+ messages in thread
From: Daniel Lezcano @ 2025-07-15 12:18 UTC (permalink / raw)
  To: daniel.lezcano, tglx, willmcvicker
  Cc: linux-kernel, Krzysztof Kozlowski, Alim Akhtar,
	moderated list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES,
	open list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES

The function register_current_timer_delay() when compiling on ARM32
fails with a section mismatch. That is resulting from the module
conversion where the function exynos4_clocksource_init() is called
from mct_init_dt(). This one had its __init annotation removed to for
the module loading.

Fix this by adding the __init_or_module annotation for the functions:
 - mct_init_dt()
 - mct_init_spi()
 - mct_init_dt()

Compiled on ARM32 + MODULES=no, ARM64 + MODULES=yes, ARM64 +
MODULES=no

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/exynos_mct.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 5075ebe052a7..80d263ee046d 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -657,7 +657,7 @@ static int exynos4_timer_interrupts(struct device_node *np,
 	return err;
 }
 
-static int mct_init_dt(struct device_node *np, unsigned int int_type)
+static __init_or_module int mct_init_dt(struct device_node *np, unsigned int int_type)
 {
 	bool frc_shared = of_property_read_bool(np, "samsung,frc-shared");
 	u32 local_idx[MCT_NR_LOCAL] = {0};
@@ -705,12 +705,12 @@ static int mct_init_dt(struct device_node *np, unsigned int int_type)
 	return exynos4_clockevent_init();
 }
 
-static int mct_init_spi(struct device_node *np)
+static __init_or_module int mct_init_spi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_SPI);
 }
 
-static int mct_init_ppi(struct device_node *np)
+static __init_or_module int mct_init_ppi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_PPI);
 }
-- 
2.43.0


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

* Re: [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion
  2025-07-15 12:18   ` [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion Daniel Lezcano
@ 2025-07-15 17:23     ` William McVicker
  2025-07-18  9:53     ` Arnd Bergmann
                       ` (3 subsequent siblings)
  4 siblings, 0 replies; 45+ messages in thread
From: William McVicker @ 2025-07-15 17:23 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: tglx, linux-kernel, Krzysztof Kozlowski, Alim Akhtar,
	moderated list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES,
	open list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES

On 07/15/2025, Daniel Lezcano wrote:
> The function register_current_timer_delay() when compiling on ARM32
> fails with a section mismatch. That is resulting from the module
> conversion where the function exynos4_clocksource_init() is called
> from mct_init_dt(). This one had its __init annotation removed to for
> the module loading.
> 
> Fix this by adding the __init_or_module annotation for the functions:
>  - mct_init_dt()
>  - mct_init_spi()
>  - mct_init_dt()
> 
> Compiled on ARM32 + MODULES=no, ARM64 + MODULES=yes, ARM64 +
> MODULES=no
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>

Reviewed-by: Will McVicker <willmcvicker@google.com>

> ---
>  drivers/clocksource/exynos_mct.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
> index 5075ebe052a7..80d263ee046d 100644
> --- a/drivers/clocksource/exynos_mct.c
> +++ b/drivers/clocksource/exynos_mct.c
> @@ -657,7 +657,7 @@ static int exynos4_timer_interrupts(struct device_node *np,
>  	return err;
>  }
>  
> -static int mct_init_dt(struct device_node *np, unsigned int int_type)
> +static __init_or_module int mct_init_dt(struct device_node *np, unsigned int int_type)
>  {
>  	bool frc_shared = of_property_read_bool(np, "samsung,frc-shared");
>  	u32 local_idx[MCT_NR_LOCAL] = {0};
> @@ -705,12 +705,12 @@ static int mct_init_dt(struct device_node *np, unsigned int int_type)
>  	return exynos4_clockevent_init();
>  }
>  
> -static int mct_init_spi(struct device_node *np)
> +static __init_or_module int mct_init_spi(struct device_node *np)
>  {
>  	return mct_init_dt(np, MCT_INT_SPI);
>  }
>  
> -static int mct_init_ppi(struct device_node *np)
> +static __init_or_module int mct_init_ppi(struct device_node *np)
>  {
>  	return mct_init_dt(np, MCT_INT_PPI);
>  }
> -- 
> 2.43.0
> 

Thanks Daniel for catching this! Sorry I missed it.

Regards,
Will


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

* Re: [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion
  2025-07-15 12:18   ` [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion Daniel Lezcano
  2025-07-15 17:23     ` William McVicker
@ 2025-07-18  9:53     ` Arnd Bergmann
  2025-07-23  7:17     ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
                       ` (2 subsequent siblings)
  4 siblings, 0 replies; 45+ messages in thread
From: Arnd Bergmann @ 2025-07-18  9:53 UTC (permalink / raw)
  To: Daniel Lezcano, Thomas Gleixner, William McVicker
  Cc: linux-kernel, Krzysztof Kozlowski, Alim Akhtar,
	moderated list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES,
	open list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES

On Tue, Jul 15, 2025, at 14:18, Daniel Lezcano wrote:
> diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
> index 5075ebe052a7..80d263ee046d 100644
> --- a/drivers/clocksource/exynos_mct.c
> +++ b/drivers/clocksource/exynos_mct.c
> @@ -657,7 +657,7 @@ static int exynos4_timer_interrupts(struct device_node *np,
>  	return err;
>  }
> 
> -static int mct_init_dt(struct device_node *np, unsigned int int_type)
> +static __init_or_module int mct_init_dt(struct device_node *np, 
> unsigned int int_type)
>  {
>  	bool frc_shared = of_property_read_bool(np, "samsung,frc-shared");
>  	u32 local_idx[MCT_NR_LOCAL] = {0};

Something still feels off here, though I'm not sure what the best
solution would be. Some observations:

 - The exynos4_mct_probe() function is listed as permanent, but
   it indirectly calls an __init_or_module function, which is not
   technically allowed but does not produce a warning here
   because of the indirection.

 - if the driver is built-in and the platform_driver picks
   up the device, it can be manually unbound and rebound, but the
   mct_init_dt() will be discarded at this point.

 - In a loadable module, you cannot call register_current_timer_delay(),
   since this causes a link failure.

 - unloading the module fails to undo the registration, so the
   next call to delay(), sched_clock(), ktime_get() or an interrupt
   ends up in invalid memory.

I think the driver should use an explicit init function calling
platform_driver_probe(), so the probe is only done at initcall
time and both unbinding and unloading are prevented.

       Arnd

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion
  2025-07-15 12:18   ` [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion Daniel Lezcano
  2025-07-15 17:23     ` William McVicker
  2025-07-18  9:53     ` Arnd Bergmann
@ 2025-07-23  7:17     ` tip-bot2 for Daniel Lezcano
  2025-07-25  8:48     ` [PATCH] " Krzysztof Kozlowski
  2025-07-25 10:31     ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
  4 siblings, 0 replies; 45+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-23  7:17 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: Will McVicker, Daniel Lezcano, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     7e477e9c4eb412cbcaeae3ed4fff22035dc943eb
Gitweb:        https://git.kernel.org/tip/7e477e9c4eb412cbcaeae3ed4fff22035dc943eb
Author:        Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate:    Tue, 15 Jul 2025 14:18:33 +02:00
Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Tue, 15 Jul 2025 19:46:23 +02:00

clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion

The function register_current_timer_delay() when compiling on ARM32
fails with a section mismatch. That is resulting from the module
conversion where the function exynos4_clocksource_init() is called
from mct_init_dt(). This one had its __init annotation removed to for
the module loading.

Fix this by adding the __init_or_module annotation for the functions:
 - mct_init_dt()
 - mct_init_spi()
 - mct_init_dt()

Compiled on ARM32 + MODULES=no, ARM64 + MODULES=yes, ARM64 +
MODULES=no

Link: https://lore.kernel.org/r/20250715121834.2059191-1-daniel.lezcano@linaro.org
Reviewed-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/exynos_mct.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 5075ebe..80d263e 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -657,7 +657,7 @@ out_irq:
 	return err;
 }
 
-static int mct_init_dt(struct device_node *np, unsigned int int_type)
+static __init_or_module int mct_init_dt(struct device_node *np, unsigned int int_type)
 {
 	bool frc_shared = of_property_read_bool(np, "samsung,frc-shared");
 	u32 local_idx[MCT_NR_LOCAL] = {0};
@@ -705,12 +705,12 @@ static int mct_init_dt(struct device_node *np, unsigned int int_type)
 	return exynos4_clockevent_init();
 }
 
-static int mct_init_spi(struct device_node *np)
+static __init_or_module int mct_init_spi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_SPI);
 }
 
-static int mct_init_ppi(struct device_node *np)
+static __init_or_module int mct_init_ppi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_PPI);
 }

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

* [tip: timers/clocksource] arm64: exynos: Drop select CLKSRC_EXYNOS_MCT
  2025-06-20 18:17 ` [PATCH v4 6/6] arm64: exynos: Drop select CLKSRC_EXYNOS_MCT Will McVicker
@ 2025-07-23  7:17   ` tip-bot2 for Will McVicker
  2025-07-25 10:31   ` tip-bot2 for Will McVicker
  1 sibling, 0 replies; 45+ messages in thread
From: tip-bot2 for Will McVicker @ 2025-07-23  7:17 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Youngmin Nam, Will McVicker, Daniel Lezcano, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     aa896540ee8caff1a61431673f53199bbc980d76
Gitweb:        https://git.kernel.org/tip/aa896540ee8caff1a61431673f53199bbc980d76
Author:        Will McVicker <willmcvicker@google.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:09 -07:00
Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Tue, 15 Jul 2025 13:00:51 +02:00

arm64: exynos: Drop select CLKSRC_EXYNOS_MCT

Since the Exynos MCT driver can be built as a module for some Arm64 SoCs
like gs101, drop force-selecting it as a built-in driver by ARCH_EXYNOS
and instead depend on `default y if ARCH_EXYNOS` to select it
automatically. This allows platforms like Android to build the driver as
a module if desired.

Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-7-willmcvicker@google.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 arch/arm64/Kconfig.platforms | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
index a541bb0..46825b0 100644
--- a/arch/arm64/Kconfig.platforms
+++ b/arch/arm64/Kconfig.platforms
@@ -109,7 +109,6 @@ config ARCH_BLAIZE
 config ARCH_EXYNOS
 	bool "Samsung Exynos SoC family"
 	select COMMON_CLK_SAMSUNG
-	select CLKSRC_EXYNOS_MCT
 	select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS
 	select EXYNOS_PMU
 	select PINCTRL

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Add module support
  2025-06-20 18:17 ` [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support Will McVicker
  2025-06-24 13:48   ` Daniel Lezcano
  2025-07-15 12:18   ` [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion Daniel Lezcano
@ 2025-07-23  7:17   ` tip-bot2 for Donghoon Yu
  2025-07-25  9:40   ` [PATCH v4 5/6] " Daniel Lezcano
  2025-07-25 10:31   ` [tip: timers/clocksource] " tip-bot2 for Donghoon Yu
  4 siblings, 0 replies; 45+ messages in thread
From: tip-bot2 for Donghoon Yu @ 2025-07-23  7:17 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Donghoon Yu, Youngmin Nam, Will McVicker, Daniel Lezcano, x86,
	linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     5d86e479193babb6487c33bc01a464c54933eba6
Gitweb:        https://git.kernel.org/tip/5d86e479193babb6487c33bc01a464c54933eba6
Author:        Donghoon Yu <hoony.yu@samsung.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:08 -07:00
Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Tue, 15 Jul 2025 13:00:51 +02:00

clocksource/drivers/exynos_mct: Add module support

On Arm64 platforms the Exynos MCT driver can be built as a module. On
boot (and even after boot) the arch_timer is used as the clocksource and
tick timer. Once the MCT driver is loaded, it can be used as the wakeup
source for the arch_timer.

Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
[original commit from https://android.googlesource.com/kernel/gs/+/8a52a8288ec7d88ff78f0b37480dbb0e9c65bbfd]
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-6-willmcvicker@google.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/Kconfig      |  3 +-
 drivers/clocksource/exynos_mct.c | 51 +++++++++++++++++++++++++------
 2 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 645f517..d657c8d 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -451,7 +451,8 @@ config ATMEL_TCB_CLKSRC
 	  Support for Timer Counter Blocks on Atmel SoCs.
 
 config CLKSRC_EXYNOS_MCT
-	bool "Exynos multi core timer driver" if COMPILE_TEST
+	tristate "Exynos multi core timer driver" if ARM64
+	default y if ARCH_EXYNOS || COMPILE_TEST
 	depends on ARM || ARM64
 	depends on ARCH_ARTPEC || ARCH_EXYNOS || COMPILE_TEST
 	help
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 62febeb..5075ebe 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -15,9 +15,11 @@
 #include <linux/cpu.h>
 #include <linux/delay.h>
 #include <linux/percpu.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_irq.h>
 #include <linux/of_address.h>
+#include <linux/platform_device.h>
 #include <linux/clocksource.h>
 #include <linux/sched_clock.h>
 
@@ -217,6 +219,7 @@ static struct clocksource mct_frc = {
 	.mask		= CLOCKSOURCE_MASK(32),
 	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
 	.resume		= exynos4_frc_resume,
+	.owner		= THIS_MODULE,
 };
 
 /*
@@ -241,7 +244,7 @@ static cycles_t exynos4_read_current_timer(void)
 }
 #endif
 
-static int __init exynos4_clocksource_init(bool frc_shared)
+static int exynos4_clocksource_init(bool frc_shared)
 {
 	/*
 	 * When the frc is shared, the main processor should have already
@@ -336,6 +339,7 @@ static struct clock_event_device mct_comp_device = {
 	.set_state_oneshot	= mct_set_state_shutdown,
 	.set_state_oneshot_stopped = mct_set_state_shutdown,
 	.tick_resume		= mct_set_state_shutdown,
+	.owner			= THIS_MODULE,
 };
 
 static irqreturn_t exynos4_mct_comp_isr(int irq, void *dev_id)
@@ -476,6 +480,7 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
 	evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT |
 			CLOCK_EVT_FEAT_PERCPU;
 	evt->rating = MCT_CLKEVENTS_RATING;
+	evt->owner = THIS_MODULE;
 
 	exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
 
@@ -511,7 +516,7 @@ static int exynos4_mct_dying_cpu(unsigned int cpu)
 	return 0;
 }
 
-static int __init exynos4_timer_resources(struct device_node *np)
+static int exynos4_timer_resources(struct device_node *np)
 {
 	struct clk *mct_clk, *tick_clk;
 
@@ -539,7 +544,7 @@ static int __init exynos4_timer_resources(struct device_node *np)
  * @local_idx: array mapping CPU numbers to local timer indices
  * @nr_local: size of @local_idx array
  */
-static int __init exynos4_timer_interrupts(struct device_node *np,
+static int exynos4_timer_interrupts(struct device_node *np,
 					   unsigned int int_type,
 					   const u32 *local_idx,
 					   size_t nr_local)
@@ -652,7 +657,7 @@ out_irq:
 	return err;
 }
 
-static int __init mct_init_dt(struct device_node *np, unsigned int int_type)
+static int mct_init_dt(struct device_node *np, unsigned int int_type)
 {
 	bool frc_shared = of_property_read_bool(np, "samsung,frc-shared");
 	u32 local_idx[MCT_NR_LOCAL] = {0};
@@ -700,15 +705,43 @@ static int __init mct_init_dt(struct device_node *np, unsigned int int_type)
 	return exynos4_clockevent_init();
 }
 
-
-static int __init mct_init_spi(struct device_node *np)
+static int mct_init_spi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_SPI);
 }
 
-static int __init mct_init_ppi(struct device_node *np)
+static int mct_init_ppi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_PPI);
 }
-TIMER_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
-TIMER_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
+
+static int exynos4_mct_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	int (*mct_init)(struct device_node *np);
+
+	mct_init = of_device_get_match_data(dev);
+	if (!mct_init)
+		return -EINVAL;
+
+	return mct_init(dev->of_node);
+}
+
+static const struct of_device_id exynos4_mct_match_table[] = {
+	{ .compatible = "samsung,exynos4210-mct", .data = &mct_init_spi, },
+	{ .compatible = "samsung,exynos4412-mct", .data = &mct_init_ppi, },
+	{}
+};
+MODULE_DEVICE_TABLE(of, exynos4_mct_match_table);
+
+static struct platform_driver exynos4_mct_driver = {
+	.probe		= exynos4_mct_probe,
+	.driver		= {
+		.name	= "exynos-mct",
+		.of_match_table = exynos4_mct_match_table,
+	},
+};
+module_platform_driver(exynos4_mct_driver);
+
+MODULE_DESCRIPTION("Exynos Multi Core Timer Driver");
+MODULE_LICENSE("GPL");

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Fix uninitialized irq name warning
  2025-06-20 18:17 ` [PATCH v4 4/6] clocksource/drivers/exynos_mct: Fix uninitialized irq name warning Will McVicker
@ 2025-07-23  7:17   ` tip-bot2 for Will McVicker
  2025-07-25 10:31   ` [tip: timers/clocksource] clocksource/drivers/exynos_mct: Fix uninitialized IRQ " tip-bot2 for Will McVicker
  1 sibling, 0 replies; 45+ messages in thread
From: tip-bot2 for Will McVicker @ 2025-07-23  7:17 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Peter Griffin, Youngmin Nam, Will McVicker, Daniel Lezcano, x86,
	linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     60618eec98f059ad688251f5c9990e6929e14632
Gitweb:        https://git.kernel.org/tip/60618eec98f059ad688251f5c9990e6929e14632
Author:        Will McVicker <willmcvicker@google.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:07 -07:00
Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Tue, 15 Jul 2025 13:00:51 +02:00

clocksource/drivers/exynos_mct: Fix uninitialized irq name warning

The Exynos MCT driver doesn't set the clocksource name until the CPU
hotplug state is setup which happens after the IRQs are requested. This
results in an empty IRQ name which leads to the below warning at
proc_create() time. When this happens, the userdata partition fails to
mount and the device gets stuck in an endless loop printing the error:

  root '/dev/disk/by-partlabel/userdata' doesn't exist or does not contain a /dev.

To fix this, we just need to initialize the name before requesting the
IRQs.

Warning from Pixel 6 kernel log:

[  T430] name len 0
[  T430] WARNING: CPU: 6 PID: 430 at fs/proc/generic.c:407 __proc_create+0x258/0x2b4
[  T430] Modules linked in: dwc3_exynos(E+)
[  T430]  ufs_exynos(E+) phy_exynos_ufs(E)
[  T430]  phy_exynos5_usbdrd(E) exynos_usi(E+) exynos_mct(E+) s3c2410_wdt(E)
[  T430]  arm_dsu_pmu(E) simplefb(E)
[  T430] CPU: 6 UID: 0 PID: 430 Comm: (udev-worker) Tainted:
         ... 6.14.0-next-20250331-4k-00008-g59adf909e40e #1 ...
[  T430] Tainted: [W]=WARN, [E]=UNSIGNED_MODULE
[  T430] Hardware name: Raven (DT)
[...]
[  T430] Call trace:
[  T430]  __proc_create+0x258/0x2b4 (P)
[  T430]  proc_mkdir+0x40/0xa0
[  T430]  register_handler_proc+0x118/0x140
[  T430]  __setup_irq+0x460/0x6d0
[  T430]  request_threaded_irq+0xcc/0x1b0
[  T430]  mct_init_dt+0x244/0x604 [exynos_mct ...]
[  T430]  mct_init_spi+0x18/0x34 [exynos_mct ...]
[  T430]  exynos4_mct_probe+0x30/0x4c [exynos_mct ...]
[  T430]  platform_probe+0x6c/0xe4
[  T430]  really_probe+0xf4/0x38c
[...]
[  T430]  driver_register+0x6c/0x140
[  T430]  __platform_driver_register+0x28/0x38
[  T430]  exynos4_mct_driver_init+0x24/0xfe8 [exynos_mct ...]
[  T430]  do_one_initcall+0x84/0x3c0
[  T430]  do_init_module+0x58/0x208
[  T430]  load_module+0x1de0/0x2500
[  T430]  init_module_from_file+0x8c/0xdc

Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-5-willmcvicker@google.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/exynos_mct.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index a5ef7d6..62febeb 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -465,8 +465,6 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
 		per_cpu_ptr(&percpu_mct_tick, cpu);
 	struct clock_event_device *evt = &mevt->evt;
 
-	snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d", cpu);
-
 	evt->name = mevt->name;
 	evt->cpumask = cpumask_of(cpu);
 	evt->set_next_event = exynos4_tick_set_next_event;
@@ -567,6 +565,14 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
 	for (i = MCT_L0_IRQ; i < nr_irqs; i++)
 		mct_irqs[i] = irq_of_parse_and_map(np, i);
 
+	for_each_possible_cpu(cpu) {
+		struct mct_clock_event_device *mevt =
+		    per_cpu_ptr(&percpu_mct_tick, cpu);
+
+		snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d",
+			 cpu);
+	}
+
 	if (mct_int_type == MCT_INT_PPI) {
 
 		err = request_percpu_irq(mct_irqs[MCT_L0_IRQ],

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu
  2025-06-20 18:17 ` [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu Will McVicker
@ 2025-07-23  7:17   ` tip-bot2 for Hosung Kim
  2025-07-25 10:31   ` tip-bot2 for Hosung Kim
  2025-08-26 13:51   ` [PATCH v4 3/6] " Marek Szyprowski
  2 siblings, 0 replies; 45+ messages in thread
From: tip-bot2 for Hosung Kim @ 2025-07-23  7:17 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Hosung Kim, Peter Griffin, Youngmin Nam, Will McVicker,
	Daniel Lezcano, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     10934da577f627a97db18cf05dbe0c3c1b4a68d6
Gitweb:        https://git.kernel.org/tip/10934da577f627a97db18cf05dbe0c3c1b4a68d6
Author:        Hosung Kim <hosung0.kim@samsung.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:06 -07:00
Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Tue, 15 Jul 2025 13:00:50 +02:00

clocksource/drivers/exynos_mct: Set local timer interrupts as percpu

To allow the CPU to handle it's own clock events, we need to set the
IRQF_PERCPU flag. This prevents the local timer interrupts from
migrating to other CPUs.

Signed-off-by: Hosung Kim <hosung0.kim@samsung.com>
[Original commit from https://android.googlesource.com/kernel/gs/+/03267fad19f093bac979ca78309483e9eb3a8d16]
Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-4-willmcvicker@google.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/exynos_mct.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 96361d5..a5ef7d6 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -596,7 +596,8 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
 			irq_set_status_flags(mct_irq, IRQ_NOAUTOEN);
 			if (request_irq(mct_irq,
 					exynos4_mct_tick_isr,
-					IRQF_TIMER | IRQF_NOBALANCING,
+					IRQF_TIMER | IRQF_NOBALANCING |
+					IRQF_PERCPU,
 					pcpu_mevt->name, pcpu_mevt)) {
 				pr_err("exynos-mct: cannot register IRQ (cpu%d)\n",
 									cpu);

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-06-20 18:17 ` [PATCH v4 2/6] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64 Will McVicker
@ 2025-07-23  7:17   ` tip-bot2 for Will McVicker
  2025-07-24  5:16     ` Ingo Molnar
  2025-07-25 10:31   ` tip-bot2 for Donghoon Yu
  1 sibling, 1 reply; 45+ messages in thread
From: tip-bot2 for Will McVicker @ 2025-07-23  7:17 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Donghoon Yu, Youngmin Nam, John Stultz, Will McVicker,
	Daniel Lezcano, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     394b981382e6198363cf513f6eb6be4c55b22e44
Gitweb:        https://git.kernel.org/tip/394b981382e6198363cf513f6eb6be4c55b22e44
Author:        Will McVicker <willmcvicker@google.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:05 -07:00
Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Tue, 15 Jul 2025 13:00:50 +02:00

clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64

The MCT register is unfortunately very slow to access, but importantly
does not halt in the c2 idle state. So for ARM64, we can improve
performance by not registering the MCT for sched_clock, allowing the
system to use the faster ARM architected timer for sched_clock instead.

The MCT is still registered as a clocksource, and a clockevent in order
to be a wakeup source for the arch_timer to exit the "c2" idle state.

Since ARM32 SoCs don't have an architected timer, the MCT must continue
to be used for sched_clock. Detailed discussion on this topic can be
found at [1].

[1] https://lore.kernel.org/linux-samsung-soc/1400188079-21832-1-git-send-email-chirantan@chromium.org/

[Original commit from https://android.googlesource.com/kernel/gs/+/630817f7080e92c5e0216095ff52f6eb8dd00727

Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Acked-by: John Stultz <jstultz@google.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/clocksource/exynos_mct.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index da09f46..96361d5 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -219,12 +219,18 @@ static struct clocksource mct_frc = {
 	.resume		= exynos4_frc_resume,
 };
 
+/*
+ * Since ARM devices do not have an architected timer, they need to continue
+ * using the MCT as the main clocksource for timekeeping, sched_clock, and the
+ * delay timer. For AARCH64 SoCs, the architected timer is the preferred
+ * clocksource due to it's superior performance.
+ */
+#if defined(CONFIG_ARM)
 static u64 notrace exynos4_read_sched_clock(void)
 {
 	return exynos4_read_count_32();
 }
 
-#if defined(CONFIG_ARM)
 static struct delay_timer exynos4_delay_timer;
 
 static cycles_t exynos4_read_current_timer(void)
@@ -250,12 +256,13 @@ static int __init exynos4_clocksource_init(bool frc_shared)
 	exynos4_delay_timer.read_current_timer = &exynos4_read_current_timer;
 	exynos4_delay_timer.freq = clk_rate;
 	register_current_timer_delay(&exynos4_delay_timer);
+
+	sched_clock_register(exynos4_read_sched_clock, 32, clk_rate);
 #endif
 
 	if (clocksource_register_hz(&mct_frc, clk_rate))
 		panic("%s: can't register clocksource\n", mct_frc.name);
 
-	sched_clock_register(exynos4_read_sched_clock, 32, clk_rate);
 
 	return 0;
 }

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

* [tip: timers/clocksource] of/irq: Export of_irq_count for modules
  2025-06-20 18:17 ` [PATCH v4 1/6] of/irq: Export of_irq_count for modules Will McVicker
@ 2025-07-23  7:17   ` tip-bot2 for Will McVicker
  2025-07-25 10:31   ` [tip: timers/clocksource] of/irq: Export of_irq_count() " tip-bot2 for Will McVicker
  1 sibling, 0 replies; 45+ messages in thread
From: tip-bot2 for Will McVicker @ 2025-07-23  7:17 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Rob Herring (Arm), Arnd Bergmann, Linus Walleij, Youngmin Nam,
	Will McVicker, Daniel Lezcano, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     2abaaf8cc1104906cb2241a067e380a6295ffada
Gitweb:        https://git.kernel.org/tip/2abaaf8cc1104906cb2241a067e380a6295ffada
Author:        Will McVicker <willmcvicker@google.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:04 -07:00
Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
CommitterDate: Tue, 15 Jul 2025 13:00:50 +02:00

of/irq: Export of_irq_count for modules

Need to export `of_irq_count` in preparation for modularizing the Exynos
MCT driver which uses this API for setting up the timer IRQs.

Acked-by: Rob Herring (Arm) <robh@kernel.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Linus Walleij <linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-2-willmcvicker@google.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/of/irq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index f8ad79b..5adda1d 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -519,6 +519,7 @@ int of_irq_count(struct device_node *dev)
 
 	return nr;
 }
+EXPORT_SYMBOL_GPL(of_irq_count);
 
 /**
  * of_irq_to_resource_table - Fill in resource table with node's IRQ info

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
@ 2025-07-24  5:16     ` Ingo Molnar
  2025-07-24  5:20       ` Ingo Molnar
  2025-07-24 10:04       ` Daniel Lezcano
  0 siblings, 2 replies; 45+ messages in thread
From: Ingo Molnar @ 2025-07-24  5:16 UTC (permalink / raw)
  To: linux-kernel, Thomas Gleixner, Daniel Lezcano
  Cc: linux-tip-commits, Donghoon Yu, Youngmin Nam, John Stultz,
	Will McVicker, Daniel Lezcano, x86


* tip-bot2 for Will McVicker <tip-bot2@linutronix.de> wrote:

> The following commit has been merged into the timers/clocksource branch of tip:
> 
> Commit-ID:     394b981382e6198363cf513f6eb6be4c55b22e44
> Gitweb:        https://git.kernel.org/tip/394b981382e6198363cf513f6eb6be4c55b22e44
> Author:        Will McVicker <willmcvicker@google.com>
> AuthorDate:    Fri, 20 Jun 2025 11:17:05 -07:00
> Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
> CommitterDate: Tue, 15 Jul 2025 13:00:50 +02:00
> 
> clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
> 
> The MCT register is unfortunately very slow to access, but importantly
> does not halt in the c2 idle state. So for ARM64, we can improve
> performance by not registering the MCT for sched_clock, allowing the
> system to use the faster ARM architected timer for sched_clock instead.
> 
> The MCT is still registered as a clocksource, and a clockevent in order
> to be a wakeup source for the arch_timer to exit the "c2" idle state.
> 
> Since ARM32 SoCs don't have an architected timer, the MCT must continue
> to be used for sched_clock. Detailed discussion on this topic can be
> found at [1].
> 
> [1] https://lore.kernel.org/linux-samsung-soc/1400188079-21832-1-git-send-email-chirantan@chromium.org/
> 
> [Original commit from https://android.googlesource.com/kernel/gs/+/630817f7080e92c5e0216095ff52f6eb8dd00727
> 
> Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> Acked-by: John Stultz <jstultz@google.com>
> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
> Signed-off-by: Will McVicker <willmcvicker@google.com>
> Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>

The whole SOB chain of this commit is messy and has several serious 
problems:

1)

This commit has misattributed authorship: the first SOB is:

   Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>

but the Author field is not Donghoon Yu:

   Author:        Will McVicker <willmcvicker@google.com>

2)

The Reviewed-by tag is misapplied:

> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>

When someone passes along a patch, it's implicit that they have 
reviewed it.

3)

There's also a stray Tested-by tag by one of the SOB entries:

> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>

When someone passes along a patch, it's implicit that they not only 
have reviewed the patch, but have also tested it to a certain extent 
...

4)

Why is the 'Link' tag just in the middle of the SOB chain, instead at the end of it?


Presumably this is the proper SOB chain:

> Author:        Donghoon Yu <hoony.yu@samsung.com>

> Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> Signed-off-by: Will McVicker <willmcvicker@google.com>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> Acked-by: John Stultz <jstultz@google.com>
> Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com

Correct?

Thanks,

	Ingo

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-24  5:16     ` Ingo Molnar
@ 2025-07-24  5:20       ` Ingo Molnar
  2025-07-24  9:25         ` Thomas Gleixner
  2025-07-24 10:04       ` Daniel Lezcano
  1 sibling, 1 reply; 45+ messages in thread
From: Ingo Molnar @ 2025-07-24  5:20 UTC (permalink / raw)
  To: linux-kernel, Thomas Gleixner, Daniel Lezcano
  Cc: linux-tip-commits, Donghoon Yu, Youngmin Nam, John Stultz,
	Will McVicker, x86


* Ingo Molnar <mingo@kernel.org> wrote:

> The whole SOB chain of this commit is messy and has several serious 
> problems:

Not just this commit, but most of the other commits in 
tip:timers/clocksource have various problems in their tag sections ... 
I only checked these more closely:

 5d86e479193b clocksource/drivers/exynos_mct: Add module support
 60618eec98f0 clocksource/drivers/exynos_mct: Fix uninitialized irq name warning
 10934da577f6 clocksource/drivers/exynos_mct: Set local timer interrupts as percpu
 394b981382e6 clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64

but all of them have various problems. And literally all 23 commits 
have the Link tag misplaced in the middle of the tag section.

Thanks,

	Ingo

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-24  5:20       ` Ingo Molnar
@ 2025-07-24  9:25         ` Thomas Gleixner
  0 siblings, 0 replies; 45+ messages in thread
From: Thomas Gleixner @ 2025-07-24  9:25 UTC (permalink / raw)
  To: Ingo Molnar, linux-kernel, Daniel Lezcano
  Cc: linux-tip-commits, Donghoon Yu, Youngmin Nam, John Stultz,
	Will McVicker, x86

On Thu, Jul 24 2025 at 07:20, Ingo Molnar wrote:
> * Ingo Molnar <mingo@kernel.org> wrote:
>
>> The whole SOB chain of this commit is messy and has several serious 
>> problems:
>
> Not just this commit, but most of the other commits in 
> tip:timers/clocksource have various problems in their tag sections ... 
> I only checked these more closely:
>
>  5d86e479193b clocksource/drivers/exynos_mct: Add module support
>  60618eec98f0 clocksource/drivers/exynos_mct: Fix uninitialized irq name warning
>  10934da577f6 clocksource/drivers/exynos_mct: Set local timer interrupts as percpu
>  394b981382e6 clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
>
> but all of them have various problems. And literally all 23 commits 
> have the Link tag misplaced in the middle of the tag section.

Duh. I did not check when pulling that lot.

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-24  5:16     ` Ingo Molnar
  2025-07-24  5:20       ` Ingo Molnar
@ 2025-07-24 10:04       ` Daniel Lezcano
  2025-07-25 10:34         ` Ingo Molnar
  1 sibling, 1 reply; 45+ messages in thread
From: Daniel Lezcano @ 2025-07-24 10:04 UTC (permalink / raw)
  To: Ingo Molnar, linux-kernel, Thomas Gleixner
  Cc: linux-tip-commits, Donghoon Yu, Youngmin Nam, John Stultz,
	Will McVicker, x86

On 24/07/2025 07:16, Ingo Molnar wrote:
> 
> * tip-bot2 for Will McVicker <tip-bot2@linutronix.de> wrote:
> 
>> The following commit has been merged into the timers/clocksource branch of tip:
>>
>> Commit-ID:     394b981382e6198363cf513f6eb6be4c55b22e44
>> Gitweb:        https://git.kernel.org/tip/394b981382e6198363cf513f6eb6be4c55b22e44
>> Author:        Will McVicker <willmcvicker@google.com>
>> AuthorDate:    Fri, 20 Jun 2025 11:17:05 -07:00
>> Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
>> CommitterDate: Tue, 15 Jul 2025 13:00:50 +02:00
>>
>> clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
>>
>> The MCT register is unfortunately very slow to access, but importantly
>> does not halt in the c2 idle state. So for ARM64, we can improve
>> performance by not registering the MCT for sched_clock, allowing the
>> system to use the faster ARM architected timer for sched_clock instead.
>>
>> The MCT is still registered as a clocksource, and a clockevent in order
>> to be a wakeup source for the arch_timer to exit the "c2" idle state.
>>
>> Since ARM32 SoCs don't have an architected timer, the MCT must continue
>> to be used for sched_clock. Detailed discussion on this topic can be
>> found at [1].
>>
>> [1] https://lore.kernel.org/linux-samsung-soc/1400188079-21832-1-git-send-email-chirantan@chromium.org/
>>
>> [Original commit from https://android.googlesource.com/kernel/gs/+/630817f7080e92c5e0216095ff52f6eb8dd00727
>>
>> Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
>> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
>> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
>> Acked-by: John Stultz <jstultz@google.com>
>> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
>> Signed-off-by: Will McVicker <willmcvicker@google.com>
>> Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
>> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> 
> The whole SOB chain of this commit is messy and has several serious
> problems:
> 
> 1)
> 
> This commit has misattributed authorship: the first SOB is:
> 
>     Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
> 
> but the Author field is not Donghoon Yu:
> 
>     Author:        Will McVicker <willmcvicker@google.com>

Yes, you are right. I should have pay more attention to author / sob, 
thanks for spotting it.

> 2)
> 
> The Reviewed-by tag is misapplied:
> 
>> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
>> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> 
> When someone passes along a patch, it's implicit that they have
> reviewed it.

Well my understanding of the SOB chain for these is the Signed-off-by 
from Youngmin is in the delivery path because it went first to the AOSP, 
then carried on to Linux by Will. Then Reviewed-by Youngmin letting us 
know the port from AOSP to Linux is ok.

> 3)
> 
> There's also a stray Tested-by tag by one of the SOB entries:
> 
>> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
>> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
>> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
> 
> When someone passes along a patch, it's implicit that they not only
> have reviewed the patch, but have also tested it to a certain extent

In this specific case where the original commit is from AOSP, this chain 
seems to make sense. Souns like:

"I was in the original commit delivery path"
"I reviewed this patch carried to Linux"
"I tested it on Linux"

> ...
> 
> 4)
> 
> Why is the 'Link' tag just in the middle of the SOB chain, instead at the end of it?

I don't know. Link must be at the end  It is stated somewhere in the 
documentation?

I use git b4 -s <msg-id> and the tool adds the Link then my sign off.


> Presumably this is the proper SOB chain:
> 
>> Author:        Donghoon Yu <hoony.yu@samsung.com>
> 
>> Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
>> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
>> Signed-off-by: Will McVicker <willmcvicker@google.com>
>> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>> Acked-by: John Stultz <jstultz@google.com>
>> Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
> 
> Correct?








-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* Re: [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion
  2025-07-15 12:18   ` [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion Daniel Lezcano
                       ` (2 preceding siblings ...)
  2025-07-23  7:17     ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
@ 2025-07-25  8:48     ` Krzysztof Kozlowski
  2025-07-25  8:52       ` Krzysztof Kozlowski
  2025-07-25 10:31     ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
  4 siblings, 1 reply; 45+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-25  8:48 UTC (permalink / raw)
  To: Daniel Lezcano, tglx, willmcvicker
  Cc: linux-kernel, Alim Akhtar,
	moderated list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES,
	open list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES

On 15/07/2025 14:18, Daniel Lezcano wrote:
> The function register_current_timer_delay() when compiling on ARM32
> fails with a section mismatch. That is resulting from the module
> conversion where the function exynos4_clocksource_init() is called
> from mct_init_dt(). This one had its __init annotation removed to for
> the module loading.
> 
> Fix this by adding the __init_or_module annotation for the functions:
>  - mct_init_dt()
>  - mct_init_spi()
>  - mct_init_dt()
> 
> Compiled on ARM32 + MODULES=no, ARM64 + MODULES=yes, ARM64 +
> MODULES=no
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
>  drivers/clocksource/exynos_mct.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)

Did anyone applied this or any other fix?

Next builds are still broken.
https://krzk.eu/#/builders/12/builds/3365

Please revert untested patches if there is no consensus for fixes

It's really surprising that original patchset was not even built by
defconfigs (and I assume it was not even asked to be built by LKP).

Best regards,
Krzysztof

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

* Re: [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion
  2025-07-25  8:48     ` [PATCH] " Krzysztof Kozlowski
@ 2025-07-25  8:52       ` Krzysztof Kozlowski
  0 siblings, 0 replies; 45+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-25  8:52 UTC (permalink / raw)
  To: Daniel Lezcano, tglx, willmcvicker
  Cc: linux-kernel, Alim Akhtar,
	moderated list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES,
	open list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES

On 25/07/2025 10:48, Krzysztof Kozlowski wrote:
> On 15/07/2025 14:18, Daniel Lezcano wrote:
>> The function register_current_timer_delay() when compiling on ARM32
>> fails with a section mismatch. That is resulting from the module
>> conversion where the function exynos4_clocksource_init() is called
>> from mct_init_dt(). This one had its __init annotation removed to for
>> the module loading.
>>
>> Fix this by adding the __init_or_module annotation for the functions:
>>  - mct_init_dt()
>>  - mct_init_spi()
>>  - mct_init_dt()
>>
>> Compiled on ARM32 + MODULES=no, ARM64 + MODULES=yes, ARM64 +
>> MODULES=no
>>
>> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>> ---
>>  drivers/clocksource/exynos_mct.c | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> Did anyone applied this or any other fix?
> 
> Next builds are still broken.
> https://krzk.eu/#/builders/12/builds/3365

... and first failure was 9 (!) days ago:
https://krzk.eu/#/builders/12/builds/3350


Best regards,
Krzysztof

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

* Re: [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support
  2025-06-20 18:17 ` [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support Will McVicker
                     ` (2 preceding siblings ...)
  2025-07-23  7:17   ` [tip: timers/clocksource] clocksource/drivers/exynos_mct: Add module support tip-bot2 for Donghoon Yu
@ 2025-07-25  9:40   ` Daniel Lezcano
  2025-07-25 10:31   ` [tip: timers/clocksource] " tip-bot2 for Donghoon Yu
  4 siblings, 0 replies; 45+ messages in thread
From: Daniel Lezcano @ 2025-07-25  9:40 UTC (permalink / raw)
  To: Will McVicker, Catalin Marinas, Will Deacon, Thomas Gleixner,
	Krzysztof Kozlowski, Alim Akhtar, Rob Herring, Saravana Kannan
  Cc: Donghoon Yu, Hosung Kim, kernel-team, linux-arm-kernel,
	linux-kernel, John Stultz, Youngmin Nam, Peter Griffin,
	Tudor Ambarus, André Draszik, Conor Dooley,
	linux-samsung-soc, devicetree


Hi Will,


On 20/06/2025 20:17, Will McVicker wrote:

[ ... ]

> -TIMER_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
> -TIMER_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);

Was these changes tested on the ARM32 Exynos platforms ? Especially did 
you check if there is no boot time regression ?

> +static int exynos4_mct_probe(struct platform_device *pdev)
> +{
> +	struct device *dev = &pdev->dev;
> +	int (*mct_init)(struct device_node *np);
> +
> +	mct_init = of_device_get_match_data(dev);
> +	if (!mct_init)
> +		return -EINVAL;
> +
> +	return mct_init(dev->of_node);
> +}
> +
> +static const struct of_device_id exynos4_mct_match_table[] = {
> +	{ .compatible = "samsung,exynos4210-mct", .data = &mct_init_spi, },
> +	{ .compatible = "samsung,exynos4412-mct", .data = &mct_init_ppi, },
> +	{}
> +};
> +MODULE_DEVICE_TABLE(of, exynos4_mct_match_table);
> +
> +static struct platform_driver exynos4_mct_driver = {
> +	.probe		= exynos4_mct_probe,
> +	.driver		= {
> +		.name	= "exynos-mct",
> +		.of_match_table = exynos4_mct_match_table,
> +	},
> +};
> +module_platform_driver(exynos4_mct_driver);
> +
> +MODULE_DESCRIPTION("Exynos Multi Core Timer Driver");
> +MODULE_LICENSE("GPL");


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion
  2025-07-15 12:18   ` [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion Daniel Lezcano
                       ` (3 preceding siblings ...)
  2025-07-25  8:48     ` [PATCH] " Krzysztof Kozlowski
@ 2025-07-25 10:31     ` tip-bot2 for Daniel Lezcano
  4 siblings, 0 replies; 45+ messages in thread
From: tip-bot2 for Daniel Lezcano @ 2025-07-25 10:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Daniel Lezcano, Ingo Molnar, Will McVicker, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     85198c87e4842f1239b4ad93586cf629583f480d
Gitweb:        https://git.kernel.org/tip/85198c87e4842f1239b4ad93586cf629583f480d
Author:        Daniel Lezcano <daniel.lezcano@linaro.org>
AuthorDate:    Tue, 15 Jul 2025 14:18:33 +02:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 12:07:30 +02:00

clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion

The function register_current_timer_delay() when compiling on ARM32
fails with a section mismatch. That is resulting from the module
conversion where the function exynos4_clocksource_init() is called
from mct_init_dt(). This one had its __init annotation removed to for
the module loading.

Fix this by adding the __init_or_module annotation for the functions:

 - mct_init_dt()
 - mct_init_spi()
 - mct_init_dt()

Compiled on ARM32 + MODULES=no, ARM64 + MODULES=yes, ARM64 +
MODULES=no

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Will McVicker <willmcvicker@google.com>
Link: https://lore.kernel.org/r/20250715121834.2059191-1-daniel.lezcano@linaro.org
---
 drivers/clocksource/exynos_mct.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 5075ebe..80d263e 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -657,7 +657,7 @@ out_irq:
 	return err;
 }
 
-static int mct_init_dt(struct device_node *np, unsigned int int_type)
+static __init_or_module int mct_init_dt(struct device_node *np, unsigned int int_type)
 {
 	bool frc_shared = of_property_read_bool(np, "samsung,frc-shared");
 	u32 local_idx[MCT_NR_LOCAL] = {0};
@@ -705,12 +705,12 @@ static int mct_init_dt(struct device_node *np, unsigned int int_type)
 	return exynos4_clockevent_init();
 }
 
-static int mct_init_spi(struct device_node *np)
+static __init_or_module int mct_init_spi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_SPI);
 }
 
-static int mct_init_ppi(struct device_node *np)
+static __init_or_module int mct_init_ppi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_PPI);
 }

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

* [tip: timers/clocksource] arm64: exynos: Drop select CLKSRC_EXYNOS_MCT
  2025-06-20 18:17 ` [PATCH v4 6/6] arm64: exynos: Drop select CLKSRC_EXYNOS_MCT Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
@ 2025-07-25 10:31   ` tip-bot2 for Will McVicker
  1 sibling, 0 replies; 45+ messages in thread
From: tip-bot2 for Will McVicker @ 2025-07-25 10:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Will McVicker, Daniel Lezcano, Ingo Molnar, Youngmin Nam, x86,
	linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     2798e90b4e095940e3736312499a0fb562f3ee60
Gitweb:        https://git.kernel.org/tip/2798e90b4e095940e3736312499a0fb562f3ee60
Author:        Will McVicker <willmcvicker@google.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:09 -07:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 12:06:22 +02:00

arm64: exynos: Drop select CLKSRC_EXYNOS_MCT

Since the Exynos MCT driver can be built as a module for some Arm64 SoCs
like gs101, drop force-selecting it as a built-in driver by ARCH_EXYNOS
and instead depend on `default y if ARCH_EXYNOS` to select it
automatically. This allows platforms like Android to build the driver as
a module if desired.

Signed-off-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-7-willmcvicker@google.com
---
 arch/arm64/Kconfig.platforms | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms
index a541bb0..46825b0 100644
--- a/arch/arm64/Kconfig.platforms
+++ b/arch/arm64/Kconfig.platforms
@@ -109,7 +109,6 @@ config ARCH_BLAIZE
 config ARCH_EXYNOS
 	bool "Samsung Exynos SoC family"
 	select COMMON_CLK_SAMSUNG
-	select CLKSRC_EXYNOS_MCT
 	select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS
 	select EXYNOS_PMU
 	select PINCTRL

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Add module support
  2025-06-20 18:17 ` [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support Will McVicker
                     ` (3 preceding siblings ...)
  2025-07-25  9:40   ` [PATCH v4 5/6] " Daniel Lezcano
@ 2025-07-25 10:31   ` tip-bot2 for Donghoon Yu
  4 siblings, 0 replies; 45+ messages in thread
From: tip-bot2 for Donghoon Yu @ 2025-07-25 10:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Donghoon Yu, Youngmin Nam, Will McVicker, Daniel Lezcano,
	Ingo Molnar, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     338007c44c7f97a068c455fef5a49a49cc9389de
Gitweb:        https://git.kernel.org/tip/338007c44c7f97a068c455fef5a49a49cc9389de
Author:        Donghoon Yu <hoony.yu@samsung.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:08 -07:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 12:06:18 +02:00

clocksource/drivers/exynos_mct: Add module support

On Arm64 platforms the Exynos MCT driver can be built as a module. On
boot (and even after boot) the arch_timer is used as the clocksource and
tick timer. Once the MCT driver is loaded, it can be used as the wakeup
source for the arch_timer.

Original commit from:

  https://android.googlesource.com/kernel/gs/+/8a52a8288ec7d88ff78f0b37480dbb0e9c65bbfd]

Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20250620181719.1399856-6-willmcvicker@google.com
---
 drivers/clocksource/Kconfig      |  3 +-
 drivers/clocksource/exynos_mct.c | 51 +++++++++++++++++++++++++------
 2 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 645f517..d657c8d 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -451,7 +451,8 @@ config ATMEL_TCB_CLKSRC
 	  Support for Timer Counter Blocks on Atmel SoCs.
 
 config CLKSRC_EXYNOS_MCT
-	bool "Exynos multi core timer driver" if COMPILE_TEST
+	tristate "Exynos multi core timer driver" if ARM64
+	default y if ARCH_EXYNOS || COMPILE_TEST
 	depends on ARM || ARM64
 	depends on ARCH_ARTPEC || ARCH_EXYNOS || COMPILE_TEST
 	help
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 62febeb..5075ebe 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -15,9 +15,11 @@
 #include <linux/cpu.h>
 #include <linux/delay.h>
 #include <linux/percpu.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_irq.h>
 #include <linux/of_address.h>
+#include <linux/platform_device.h>
 #include <linux/clocksource.h>
 #include <linux/sched_clock.h>
 
@@ -217,6 +219,7 @@ static struct clocksource mct_frc = {
 	.mask		= CLOCKSOURCE_MASK(32),
 	.flags		= CLOCK_SOURCE_IS_CONTINUOUS,
 	.resume		= exynos4_frc_resume,
+	.owner		= THIS_MODULE,
 };
 
 /*
@@ -241,7 +244,7 @@ static cycles_t exynos4_read_current_timer(void)
 }
 #endif
 
-static int __init exynos4_clocksource_init(bool frc_shared)
+static int exynos4_clocksource_init(bool frc_shared)
 {
 	/*
 	 * When the frc is shared, the main processor should have already
@@ -336,6 +339,7 @@ static struct clock_event_device mct_comp_device = {
 	.set_state_oneshot	= mct_set_state_shutdown,
 	.set_state_oneshot_stopped = mct_set_state_shutdown,
 	.tick_resume		= mct_set_state_shutdown,
+	.owner			= THIS_MODULE,
 };
 
 static irqreturn_t exynos4_mct_comp_isr(int irq, void *dev_id)
@@ -476,6 +480,7 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
 	evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT |
 			CLOCK_EVT_FEAT_PERCPU;
 	evt->rating = MCT_CLKEVENTS_RATING;
+	evt->owner = THIS_MODULE;
 
 	exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
 
@@ -511,7 +516,7 @@ static int exynos4_mct_dying_cpu(unsigned int cpu)
 	return 0;
 }
 
-static int __init exynos4_timer_resources(struct device_node *np)
+static int exynos4_timer_resources(struct device_node *np)
 {
 	struct clk *mct_clk, *tick_clk;
 
@@ -539,7 +544,7 @@ static int __init exynos4_timer_resources(struct device_node *np)
  * @local_idx: array mapping CPU numbers to local timer indices
  * @nr_local: size of @local_idx array
  */
-static int __init exynos4_timer_interrupts(struct device_node *np,
+static int exynos4_timer_interrupts(struct device_node *np,
 					   unsigned int int_type,
 					   const u32 *local_idx,
 					   size_t nr_local)
@@ -652,7 +657,7 @@ out_irq:
 	return err;
 }
 
-static int __init mct_init_dt(struct device_node *np, unsigned int int_type)
+static int mct_init_dt(struct device_node *np, unsigned int int_type)
 {
 	bool frc_shared = of_property_read_bool(np, "samsung,frc-shared");
 	u32 local_idx[MCT_NR_LOCAL] = {0};
@@ -700,15 +705,43 @@ static int __init mct_init_dt(struct device_node *np, unsigned int int_type)
 	return exynos4_clockevent_init();
 }
 
-
-static int __init mct_init_spi(struct device_node *np)
+static int mct_init_spi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_SPI);
 }
 
-static int __init mct_init_ppi(struct device_node *np)
+static int mct_init_ppi(struct device_node *np)
 {
 	return mct_init_dt(np, MCT_INT_PPI);
 }
-TIMER_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
-TIMER_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
+
+static int exynos4_mct_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	int (*mct_init)(struct device_node *np);
+
+	mct_init = of_device_get_match_data(dev);
+	if (!mct_init)
+		return -EINVAL;
+
+	return mct_init(dev->of_node);
+}
+
+static const struct of_device_id exynos4_mct_match_table[] = {
+	{ .compatible = "samsung,exynos4210-mct", .data = &mct_init_spi, },
+	{ .compatible = "samsung,exynos4412-mct", .data = &mct_init_ppi, },
+	{}
+};
+MODULE_DEVICE_TABLE(of, exynos4_mct_match_table);
+
+static struct platform_driver exynos4_mct_driver = {
+	.probe		= exynos4_mct_probe,
+	.driver		= {
+		.name	= "exynos-mct",
+		.of_match_table = exynos4_mct_match_table,
+	},
+};
+module_platform_driver(exynos4_mct_driver);
+
+MODULE_DESCRIPTION("Exynos Multi Core Timer Driver");
+MODULE_LICENSE("GPL");

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Fix uninitialized IRQ name warning
  2025-06-20 18:17 ` [PATCH v4 4/6] clocksource/drivers/exynos_mct: Fix uninitialized irq name warning Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
@ 2025-07-25 10:31   ` tip-bot2 for Will McVicker
  1 sibling, 0 replies; 45+ messages in thread
From: tip-bot2 for Will McVicker @ 2025-07-25 10:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Will McVicker, Daniel Lezcano, Ingo Molnar, Youngmin Nam,
	Peter Griffin, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     32abb4c011457219ee7cd5188efba65ea7030187
Gitweb:        https://git.kernel.org/tip/32abb4c011457219ee7cd5188efba65ea7030187
Author:        Will McVicker <willmcvicker@google.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:07 -07:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 12:06:04 +02:00

clocksource/drivers/exynos_mct: Fix uninitialized IRQ name warning

The Exynos MCT driver doesn't set the clocksource name until the CPU
hotplug state is setup which happens after the IRQs are requested. This
results in an empty IRQ name which leads to the below warning at
proc_create() time. When this happens, the userdata partition fails to
mount and the device gets stuck in an endless loop printing the error:

  root '/dev/disk/by-partlabel/userdata' doesn't exist or does not contain a /dev.

To fix this, we just need to initialize the name before requesting the
IRQs.

Warning from Pixel 6 kernel log:

[  T430] name len 0
[  T430] WARNING: CPU: 6 PID: 430 at fs/proc/generic.c:407 __proc_create+0x258/0x2b4
[  T430] Modules linked in: dwc3_exynos(E+)
[  T430]  ufs_exynos(E+) phy_exynos_ufs(E)
[  T430]  phy_exynos5_usbdrd(E) exynos_usi(E+) exynos_mct(E+) s3c2410_wdt(E)
[  T430]  arm_dsu_pmu(E) simplefb(E)
[  T430] CPU: 6 UID: 0 PID: 430 Comm: (udev-worker) Tainted:
         ... 6.14.0-next-20250331-4k-00008-g59adf909e40e #1 ...
[  T430] Tainted: [W]=WARN, [E]=UNSIGNED_MODULE
[  T430] Hardware name: Raven (DT)
[...]
[  T430] Call trace:
[  T430]  __proc_create+0x258/0x2b4 (P)
[  T430]  proc_mkdir+0x40/0xa0
[  T430]  register_handler_proc+0x118/0x140
[  T430]  __setup_irq+0x460/0x6d0
[  T430]  request_threaded_irq+0xcc/0x1b0
[  T430]  mct_init_dt+0x244/0x604 [exynos_mct ...]
[  T430]  mct_init_spi+0x18/0x34 [exynos_mct ...]
[  T430]  exynos4_mct_probe+0x30/0x4c [exynos_mct ...]
[  T430]  platform_probe+0x6c/0xe4
[  T430]  really_probe+0xf4/0x38c
[...]
[  T430]  driver_register+0x6c/0x140
[  T430]  __platform_driver_register+0x28/0x38
[  T430]  exynos4_mct_driver_init+0x24/0xfe8 [exynos_mct ...]
[  T430]  do_one_initcall+0x84/0x3c0
[  T430]  do_init_module+0x58/0x208
[  T430]  load_module+0x1de0/0x2500
[  T430]  init_module_from_file+0x8c/0xdc

Signed-off-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-5-willmcvicker@google.com
---
 drivers/clocksource/exynos_mct.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index a5ef7d6..62febeb 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -465,8 +465,6 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
 		per_cpu_ptr(&percpu_mct_tick, cpu);
 	struct clock_event_device *evt = &mevt->evt;
 
-	snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d", cpu);
-
 	evt->name = mevt->name;
 	evt->cpumask = cpumask_of(cpu);
 	evt->set_next_event = exynos4_tick_set_next_event;
@@ -567,6 +565,14 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
 	for (i = MCT_L0_IRQ; i < nr_irqs; i++)
 		mct_irqs[i] = irq_of_parse_and_map(np, i);
 
+	for_each_possible_cpu(cpu) {
+		struct mct_clock_event_device *mevt =
+		    per_cpu_ptr(&percpu_mct_tick, cpu);
+
+		snprintf(mevt->name, sizeof(mevt->name), "mct_tick%d",
+			 cpu);
+	}
+
 	if (mct_int_type == MCT_INT_PPI) {
 
 		err = request_percpu_irq(mct_irqs[MCT_L0_IRQ],

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu
  2025-06-20 18:17 ` [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Hosung Kim
@ 2025-07-25 10:31   ` tip-bot2 for Hosung Kim
  2025-08-26 13:51   ` [PATCH v4 3/6] " Marek Szyprowski
  2 siblings, 0 replies; 45+ messages in thread
From: tip-bot2 for Hosung Kim @ 2025-07-25 10:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Hosung Kim, Will McVicker, Daniel Lezcano, Ingo Molnar,
	Youngmin Nam, Peter Griffin, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     f3cec54ee3bfd50b90b9f3b7110b9357be97babe
Gitweb:        https://git.kernel.org/tip/f3cec54ee3bfd50b90b9f3b7110b9357be97babe
Author:        Hosung Kim <hosung0.kim@samsung.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:06 -07:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 12:05:39 +02:00

clocksource/drivers/exynos_mct: Set local timer interrupts as percpu

To allow the CPU to handle its own clock events, we need to set the
IRQF_PERCPU flag. This prevents the local timer interrupts from
migrating to other CPUs.

Original commit from:

  https://android.googlesource.com/kernel/gs/+/03267fad19f093bac979ca78309483e9eb3a8d16

Signed-off-by: Hosung Kim <hosung0.kim@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-4-willmcvicker@google.com
---
 drivers/clocksource/exynos_mct.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 96361d5..a5ef7d6 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -596,7 +596,8 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
 			irq_set_status_flags(mct_irq, IRQ_NOAUTOEN);
 			if (request_irq(mct_irq,
 					exynos4_mct_tick_isr,
-					IRQF_TIMER | IRQF_NOBALANCING,
+					IRQF_TIMER | IRQF_NOBALANCING |
+					IRQF_PERCPU,
 					pcpu_mevt->name, pcpu_mevt)) {
 				pr_err("exynos-mct: cannot register IRQ (cpu%d)\n",
 									cpu);

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

* [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-06-20 18:17 ` [PATCH v4 2/6] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64 Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
@ 2025-07-25 10:31   ` tip-bot2 for Donghoon Yu
  1 sibling, 0 replies; 45+ messages in thread
From: tip-bot2 for Donghoon Yu @ 2025-07-25 10:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Donghoon Yu, Youngmin Nam, Will McVicker, Daniel Lezcano,
	Ingo Molnar, John Stultz, x86, linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     57eac487dfd1d4342812a78138559f9f1d1d5c08
Gitweb:        https://git.kernel.org/tip/57eac487dfd1d4342812a78138559f9f1d1d5c08
Author:        Donghoon Yu <hoony.yu@samsung.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:05 -07:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 12:05:32 +02:00

clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64

The MCT register is unfortunately very slow to access, but importantly
does not halt in the c2 idle state. So for ARM64, we can improve
performance by not registering the MCT for sched_clock, allowing the
system to use the faster ARM architected timer for sched_clock instead.

The MCT is still registered as a clocksource, and a clockevent in order
to be a wakeup source for the arch_timer to exit the "c2" idle state.

Since ARM32 SoCs don't have an architected timer, the MCT must continue
to be used for sched_clock. Detailed discussion on this topic can be
found at:

  https://lore.kernel.org/linux-samsung-soc/1400188079-21832-1-git-send-email-chirantan@chromium.org/

Original commit from:

  https://android.googlesource.com/kernel/gs/+/630817f7080e92c5e0216095ff52f6eb8dd00727

Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: John Stultz <jstultz@google.com>
Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
---
 drivers/clocksource/exynos_mct.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index da09f46..96361d5 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -219,12 +219,18 @@ static struct clocksource mct_frc = {
 	.resume		= exynos4_frc_resume,
 };
 
+/*
+ * Since ARM devices do not have an architected timer, they need to continue
+ * using the MCT as the main clocksource for timekeeping, sched_clock, and the
+ * delay timer. For AARCH64 SoCs, the architected timer is the preferred
+ * clocksource due to it's superior performance.
+ */
+#if defined(CONFIG_ARM)
 static u64 notrace exynos4_read_sched_clock(void)
 {
 	return exynos4_read_count_32();
 }
 
-#if defined(CONFIG_ARM)
 static struct delay_timer exynos4_delay_timer;
 
 static cycles_t exynos4_read_current_timer(void)
@@ -250,12 +256,13 @@ static int __init exynos4_clocksource_init(bool frc_shared)
 	exynos4_delay_timer.read_current_timer = &exynos4_read_current_timer;
 	exynos4_delay_timer.freq = clk_rate;
 	register_current_timer_delay(&exynos4_delay_timer);
+
+	sched_clock_register(exynos4_read_sched_clock, 32, clk_rate);
 #endif
 
 	if (clocksource_register_hz(&mct_frc, clk_rate))
 		panic("%s: can't register clocksource\n", mct_frc.name);
 
-	sched_clock_register(exynos4_read_sched_clock, 32, clk_rate);
 
 	return 0;
 }

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

* [tip: timers/clocksource] of/irq: Export of_irq_count() for modules
  2025-06-20 18:17 ` [PATCH v4 1/6] of/irq: Export of_irq_count for modules Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
@ 2025-07-25 10:31   ` tip-bot2 for Will McVicker
  1 sibling, 0 replies; 45+ messages in thread
From: tip-bot2 for Will McVicker @ 2025-07-25 10:31 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Will McVicker, Daniel Lezcano, Ingo Molnar, Youngmin Nam,
	Linus Walleij, Rob Herring (Arm), Arnd Bergmann, x86,
	linux-kernel

The following commit has been merged into the timers/clocksource branch of tip:

Commit-ID:     8de1de5a3a8d42975953382068fb5195e9d6e6c6
Gitweb:        https://git.kernel.org/tip/8de1de5a3a8d42975953382068fb5195e9d6e6c6
Author:        Will McVicker <willmcvicker@google.com>
AuthorDate:    Fri, 20 Jun 2025 11:17:04 -07:00
Committer:     Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 25 Jul 2025 12:05:10 +02:00

of/irq: Export of_irq_count() for modules

Need to export of_irq_count() in preparation for modularizing the Exynos
MCT driver which uses this API for setting up the timer IRQs.

Signed-off-by: Will McVicker <willmcvicker@google.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Reviewed-by: Linus Walleij <linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20250620181719.1399856-2-willmcvicker@google.com
---
 drivers/of/irq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/of/irq.c b/drivers/of/irq.c
index f8ad79b..5adda1d 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -519,6 +519,7 @@ int of_irq_count(struct device_node *dev)
 
 	return nr;
 }
+EXPORT_SYMBOL_GPL(of_irq_count);
 
 /**
  * of_irq_to_resource_table - Fill in resource table with node's IRQ info

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-24 10:04       ` Daniel Lezcano
@ 2025-07-25 10:34         ` Ingo Molnar
  2025-07-25 13:15           ` Daniel Lezcano
  0 siblings, 1 reply; 45+ messages in thread
From: Ingo Molnar @ 2025-07-25 10:34 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: linux-kernel, Thomas Gleixner, linux-tip-commits, Donghoon Yu,
	Youngmin Nam, John Stultz, Will McVicker, x86


* Daniel Lezcano <daniel.lezcano@linaro.org> wrote:

> On 24/07/2025 07:16, Ingo Molnar wrote:
> > 
> > * tip-bot2 for Will McVicker <tip-bot2@linutronix.de> wrote:
> > 
> > > The following commit has been merged into the timers/clocksource branch of tip:
> > > 
> > > Commit-ID:     394b981382e6198363cf513f6eb6be4c55b22e44
> > > Gitweb:        https://git.kernel.org/tip/394b981382e6198363cf513f6eb6be4c55b22e44
> > > Author:        Will McVicker <willmcvicker@google.com>
> > > AuthorDate:    Fri, 20 Jun 2025 11:17:05 -07:00
> > > Committer:     Daniel Lezcano <daniel.lezcano@linaro.org>
> > > CommitterDate: Tue, 15 Jul 2025 13:00:50 +02:00
> > > 
> > > clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
> > > 
> > > The MCT register is unfortunately very slow to access, but importantly
> > > does not halt in the c2 idle state. So for ARM64, we can improve
> > > performance by not registering the MCT for sched_clock, allowing the
> > > system to use the faster ARM architected timer for sched_clock instead.
> > > 
> > > The MCT is still registered as a clocksource, and a clockevent in order
> > > to be a wakeup source for the arch_timer to exit the "c2" idle state.
> > > 
> > > Since ARM32 SoCs don't have an architected timer, the MCT must continue
> > > to be used for sched_clock. Detailed discussion on this topic can be
> > > found at [1].
> > > 
> > > [1] https://lore.kernel.org/linux-samsung-soc/1400188079-21832-1-git-send-email-chirantan@chromium.org/
> > > 
> > > [Original commit from https://android.googlesource.com/kernel/gs/+/630817f7080e92c5e0216095ff52f6eb8dd00727
> > > 
> > > Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
> > > Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> > > Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> > > Acked-by: John Stultz <jstultz@google.com>
> > > Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
> > > Signed-off-by: Will McVicker <willmcvicker@google.com>
> > > Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
> > > Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> > 
> > The whole SOB chain of this commit is messy and has several serious
> > problems:
> > 
> > 1)
> > 
> > This commit has misattributed authorship: the first SOB is:
> > 
> >     Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
> > 
> > but the Author field is not Donghoon Yu:
> > 
> >     Author:        Will McVicker <willmcvicker@google.com>
> 
> Yes, you are right. I should have pay more attention to author / sob, thanks
> for spotting it.
> 
> > 2)
> > 
> > The Reviewed-by tag is misapplied:
> > 
> > > Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> > > Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> > 
> > When someone passes along a patch, it's implicit that they have
> > reviewed it.
> 
> Well my understanding of the SOB chain for these is the Signed-off-by from
> Youngmin is in the delivery path because it went first to the AOSP, then
> carried on to Linux by Will. Then Reviewed-by Youngmin letting us know the
> port from AOSP to Linux is ok.
>
> > 3)
> > 
> > There's also a stray Tested-by tag by one of the SOB entries:
> > 
> > > Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> > > Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> > > Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
> > 
> > When someone passes along a patch, it's implicit that they not only
> > have reviewed the patch, but have also tested it to a certain extent
> 
> In this specific case where the original commit is from AOSP, this chain
> seems to make sense. Souns like:
> 
> "I was in the original commit delivery path"
> "I reviewed this patch carried to Linux"
> "I tested it on Linux"

Yeah, so then this should be documented by adding a comment to the tag 
itself:

    Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
    Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
    Signed-off-by: Will McVicker <willmcvicker@google.com>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>   # AOSP -> Linux port
    Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com> # AOSP -> Linux port

Otherwise it's just confusing as to why there's duplicate SOB and 
Reviewed-by entries.

But as long as the porting was basically just a cherry-pick, these 
extra tags are probably superfluous. If there was a conflict resolved 
by one of the maintainers along the SOB chain, that should be marked 
explicitly, which I see was already done in some cases:

    [ dlezcano : Fixed conflict with 20250614175556.922159-2-linux@roeck-us.net ]

> > ...
> > 
> > 4)
> > 
> > Why is the 'Link' tag just in the middle of the SOB chain, instead at the end of it?
> 
> I don't know. Link must be at the end  It is stated somewhere in the
> documentation?
> 
> I use git b4 -s <msg-id> and the tool adds the Link then my sign off.

Yeah, so using tools and not looking at the end result will often just 
create a random tag order that looks messy.

On preferred tag ordering, see:

  Documentation/process/maintainer-tip.rst

  Ordering of commit tags
  ^^^^^^^^^^^^^^^^^^^^^^^
  ...

'Link' is at the end of the list of tags.

There's some logic to the -tip tag ordering (more important tags go 
before less important tags), but it's mostly just an arbitrary order 
that we try to stick to within -tip.

> > Presumably this is the proper SOB chain:
> > 
> > > Author:        Donghoon Yu <hoony.yu@samsung.com>
> > 
> > > Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
> > > Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
> > > Signed-off-by: Will McVicker <willmcvicker@google.com>
> > > Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> > > Acked-by: John Stultz <jstultz@google.com>
> > > Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
> > 
> > Correct?
> 
> 

So I got no answer for this question, but I suppose my assumption is 
correct - so I've rebased the tip:timers/clocksource commits to fix the 
misattribution and a number of other problems, and also fixed various 
typos, spelling mistakes and inconsistencies in the changelogs while at 
it. Let me know if I got something wrong.

I've attached a delta-patch of the changelog changes below - note that 
I skipped the commit IDs to make the diff easier to read.

Thanks,

	Ingo

===================>
---	2025-07-25 12:15:26.024284067 +0200
+++	2025-07-25 12:15:18.761435799 +0200
@@ -10,6 +10,7 @@ Date:   Tue Jul 15 14:18:33 2025 +0200
     the module loading.
     
     Fix this by adding the __init_or_module annotation for the functions:
+    
      - mct_init_dt()
      - mct_init_spi()
      - mct_init_dt()
@@ -17,9 +18,10 @@ Date:   Tue Jul 15 14:18:33 2025 +0200
     Compiled on ARM32 + MODULES=no, ARM64 + MODULES=yes, ARM64 +
     MODULES=no
     
-    Link: https://lore.kernel.org/r/20250715121834.2059191-1-daniel.lezcano@linaro.org
-    Reviewed-by: Will McVicker <willmcvicker@google.com>
     Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Reviewed-by: Will McVicker <willmcvicker@google.com>
+    Link: https://lore.kernel.org/r/20250715121834.2059191-1-daniel.lezcano@linaro.org
 
 Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
 Date:   Wed Jun 11 13:07:58 2025 +0200
@@ -30,11 +32,12 @@ Date:   Wed Jun 11 13:07:58 2025 +0200
     with MT6765.
     
     Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
-    Acked-by: Rob Herring (Arm) <robh@kernel.org>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
+    Acked-by: Rob Herring (Arm) <robh@kernel.org>
     Acked-by: Conor Dooley <conor.dooley@microchip.com>
     Link: https://lore.kernel.org/r/20250611110800.458164-2-angelogioacchino.delregno@collabora.com
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Chen Ni <nichen@iscas.ac.cn>
 Date:   Tue Jun 3 14:04:50 2025 +0800
@@ -52,9 +55,10 @@ Date:   Tue Jun 3 14:04:50 2025 +0800
     Compile tested only.
     
     Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Tested-by: Caleb James DeLisle <cjd@cjdns.fr>
     Link: https://lore.kernel.org/r/20250603060450.1310204-1-nichen@iscas.ac.cn
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Frank Li <Frank.Li@nxp.com>
 Date:   Wed May 28 12:53:50 2025 -0400
@@ -67,9 +71,10 @@ Date:   Wed May 28 12:53:50 2025 -0400
     devices, which have existed for over 15 years.
     
     Signed-off-by: Frank Li <Frank.Li@nxp.com>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Acked-by: Conor Dooley <conor.dooley@microchip.com>
     Link: https://lore.kernel.org/r/20250528165351.691848-1-Frank.Li@nxp.com
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Arnd Bergmann <arnd@arndb.de>
 Date:   Fri Jun 20 13:19:35 2025 +0200
@@ -79,19 +84,21 @@ Date:   Fri Jun 20 13:19:35 2025 +0200
     The newly added function causes a build failure on 32-bit targets with
     older compiler version such as gcc-10:
     
-    arm-linux-gnueabi-ld: drivers/clocksource/timer-tegra186.o: in function `tegra186_wdt_get_timeleft':
-    timer-tegra186.c:(.text+0x3c2): undefined reference to `__aeabi_uldivmod'
+      arm-linux-gnueabi-ld: drivers/clocksource/timer-tegra186.o: in function `tegra186_wdt_get_timeleft':
+      timer-tegra186.c:(.text+0x3c2): undefined reference to `__aeabi_uldivmod'
     
     The calculation can trivially be changed to avoid the division entirely,
     as USEC_PER_SEC is a multiple of 5. Change both such calculation for
     consistency, even though gcc apparently managed to optimize the other one
     properly already.
     
+    [ dlezcano : Fixed conflict with 20250614175556.922159-2-linux@roeck-us.net ]
+    
     Fixes: 28c842c8b0f5 ("clocksource/drivers/timer-tegra186: Add WDIOC_GETTIMELEFT support")
     Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-    Link: https://lore.kernel.org/r/20250620111939.3395525-1-arnd@kernel.org
-    [dlezcano] : Fixed conflict with 20250614175556.922159-2-linux@roeck-us.net
     Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Link: https://lore.kernel.org/r/20250620111939.3395525-1-arnd@kernel.org
 
 Author: Guenter Roeck <linux@roeck-us.net>
 Date:   Sat Jun 14 10:55:56 2025 -0700
@@ -102,35 +109,37 @@ Date:   Sat Jun 14 10:55:56 2025 -0700
     remaining watchdog timeout. Simplify to use 32-bit operations,
     and add comments explaining why there will be no overflow.
     
-    Cc: Pohsun Su <pohsuns@nvidia.com>
-    Cc: Robert Lin <robelin@nvidia.com>
     Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
+    Cc: Pohsun Su <pohsuns@nvidia.com>
+    Cc: Robert Lin <robelin@nvidia.com>
     Link: https://lore.kernel.org/r/20250614175556.922159-2-linux@roeck-us.net
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Guenter Roeck <linux@roeck-us.net>
 Date:   Sat Jun 14 10:55:55 2025 -0700
 
     clocksource/drivers/timer-tegra186: Avoid 64-bit divide operation
     
-    Building the driver on xtensa fails with
+    Building the driver on xtensa fails with:
     
-    tensa-linux-ld: drivers/clocksource/timer-tegra186.o:
+      tensa-linux-ld: drivers/clocksource/timer-tegra186.o:
             in function `tegra186_timer_remove':
-    timer-tegra186.c:(.text+0x350):
+      timer-tegra186.c:(.text+0x350):
             undefined reference to `__udivdi3'
     
     Avoid the problem by rearranging the offending code to avoid the 64-bit
     divide operation.
     
     Fixes: 28c842c8b0f5 ("clocksource/drivers/timer-tegra186: Add WDIOC_GETTIMELEFT support")
-    Cc: Pohsun Su <pohsuns@nvidia.com>
-    Cc: Robert Lin <robelin@nvidia.com>
     Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
+    Cc: Pohsun Su <pohsuns@nvidia.com>
+    Cc: Robert Lin <robelin@nvidia.com>
     Link: https://lore.kernel.org/r/20250614175556.922159-1-linux@roeck-us.net
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Will McVicker <willmcvicker@google.com>
 Date:   Fri Jun 20 11:17:09 2025 -0700
@@ -143,11 +152,12 @@ Date:   Fri Jun 20 11:17:09 2025 -0700
     automatically. This allows platforms like Android to build the driver as
     a module if desired.
     
-    Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
     Signed-off-by: Will McVicker <willmcvicker@google.com>
-    Link: https://lore.kernel.org/r/20250620181719.1399856-7-willmcvicker@google.com
     Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
+    Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
+    Link: https://lore.kernel.org/r/20250620181719.1399856-7-willmcvicker@google.com
 
 Author: Donghoon Yu <hoony.yu@samsung.com>
 Date:   Fri Jun 20 11:17:08 2025 -0700
@@ -159,19 +169,21 @@ Date:   Fri Jun 20 11:17:08 2025 -0700
     tick timer. Once the MCT driver is loaded, it can be used as the wakeup
     source for the arch_timer.
     
+    Original commit from:
+    
+      https://android.googlesource.com/kernel/gs/+/8a52a8288ec7d88ff78f0b37480dbb0e9c65bbfd]
+    
     Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
     Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
-    [original commit from https://android.googlesource.com/kernel/gs/+/8a52a8288ec7d88ff78f0b37480dbb0e9c65bbfd]
-    Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
     Signed-off-by: Will McVicker <willmcvicker@google.com>
-    Link: https://lore.kernel.org/r/20250620181719.1399856-6-willmcvicker@google.com
     Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Link: https://lore.kernel.org/r/20250620181719.1399856-6-willmcvicker@google.com
 
 Author: Will McVicker <willmcvicker@google.com>
 Date:   Fri Jun 20 11:17:07 2025 -0700
 
-    clocksource/drivers/exynos_mct: Fix uninitialized irq name warning
+    clocksource/drivers/exynos_mct: Fix uninitialized IRQ name warning
     
     The Exynos MCT driver doesn't set the clocksource name until the CPU
     hotplug state is setup which happens after the IRQs are requested. This
@@ -217,32 +229,37 @@ Date:   Fri Jun 20 11:17:07 2025 -0700
     [  T430]  load_module+0x1de0/0x2500
     [  T430]  init_module_from_file+0x8c/0xdc
     
+    Signed-off-by: Will McVicker <willmcvicker@google.com>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
     Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
     Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Signed-off-by: Will McVicker <willmcvicker@google.com>
     Link: https://lore.kernel.org/r/20250620181719.1399856-5-willmcvicker@google.com
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Hosung Kim <hosung0.kim@samsung.com>
 Date:   Fri Jun 20 11:17:06 2025 -0700
 
     clocksource/drivers/exynos_mct: Set local timer interrupts as percpu
     
-    To allow the CPU to handle it's own clock events, we need to set the
+    To allow the CPU to handle its own clock events, we need to set the
     IRQF_PERCPU flag. This prevents the local timer interrupts from
     migrating to other CPUs.
     
+    Original commit from:
+    
+      https://android.googlesource.com/kernel/gs/+/03267fad19f093bac979ca78309483e9eb3a8d16
+    
     Signed-off-by: Hosung Kim <hosung0.kim@samsung.com>
-    [Original commit from https://android.googlesource.com/kernel/gs/+/03267fad19f093bac979ca78309483e9eb3a8d16]
+    Signed-off-by: Will McVicker <willmcvicker@google.com>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
     Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
     Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Signed-off-by: Will McVicker <willmcvicker@google.com>
     Link: https://lore.kernel.org/r/20250620181719.1399856-4-willmcvicker@google.com
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
-Author: Will McVicker <willmcvicker@google.com>
+Author: Donghoon Yu <hoony.yu@samsung.com>
 Date:   Fri Jun 20 11:17:05 2025 -0700
 
     clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
@@ -257,42 +274,44 @@ Date:   Fri Jun 20 11:17:05 2025 -0700
     
     Since ARM32 SoCs don't have an architected timer, the MCT must continue
     to be used for sched_clock. Detailed discussion on this topic can be
-    found at [1].
+    found at:
+    
+      https://lore.kernel.org/linux-samsung-soc/1400188079-21832-1-git-send-email-chirantan@chromium.org/
     
-    [1] https://lore.kernel.org/linux-samsung-soc/1400188079-21832-1-git-send-email-chirantan@chromium.org/
+    Original commit from:
     
-    [Original commit from https://android.googlesource.com/kernel/gs/+/630817f7080e92c5e0216095ff52f6eb8dd00727
+      https://android.googlesource.com/kernel/gs/+/630817f7080e92c5e0216095ff52f6eb8dd00727
     
     Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
     Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Acked-by: John Stultz <jstultz@google.com>
-    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
     Signed-off-by: Will McVicker <willmcvicker@google.com>
-    Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
     Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Acked-by: John Stultz <jstultz@google.com>
+    Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
 
 Author: Will McVicker <willmcvicker@google.com>
 Date:   Fri Jun 20 11:17:04 2025 -0700
 
-    of/irq: Export of_irq_count for modules
+    of/irq: Export of_irq_count() for modules
     
-    Need to export `of_irq_count` in preparation for modularizing the Exynos
+    Need to export of_irq_count() in preparation for modularizing the Exynos
     MCT driver which uses this API for setting up the timer IRQs.
     
-    Acked-by: Rob Herring (Arm) <robh@kernel.org>
-    Acked-by: Arnd Bergmann <arnd@arndb.de>
+    Signed-off-by: Will McVicker <willmcvicker@google.com>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
     Reviewed-by: Linus Walleij <linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
     Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
-    Signed-off-by: Will McVicker <willmcvicker@google.com>
+    Acked-by: Rob Herring (Arm) <robh@kernel.org>
+    Acked-by: Arnd Bergmann <arnd@arndb.de>
     Link: https://lore.kernel.org/r/20250620181719.1399856-2-willmcvicker@google.com
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Ben Zong-You Xie <ben717@andestech.com>
 Date:   Fri Jul 11 21:30:21 2025 +0800
 
-    dt-bindings: timer: add Andes machine timer
+    dt-bindings: timer: Add Andes machine timer
     
     Add the DT binding documentation for Andes machine timer.
     
@@ -301,43 +320,47 @@ Date:   Fri Jul 11 21:30:21 2025 +0800
     the implementation of the machine timer, and it contains memory-mapped
     registers (mtime and mtimecmp). This device supports up to 32 cores.
     
-    Acked-by: Conor Dooley <conor.dooley@microchip.com>
     Signed-off-by: Ben Zong-You Xie <ben717@andestech.com>
-    Link: https://lore.kernel.org/r/20250711133025.2192404-6-ben717@andestech.com
     Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Acked-by: Conor Dooley <conor.dooley@microchip.com>
+    Link: https://lore.kernel.org/r/20250711133025.2192404-6-ben717@andestech.com
 
 Author: Frank Li <Frank.Li@nxp.com>
 Date:   Fri May 23 10:14:37 2025 -0400
 
-    dt-bindings: timer: fsl,ftm-timer: use items for reg
+    dt-bindings: timer: fsl,ftm-timer: Use 'items' for 'reg'
     
     The original txt binding doc is:
+    
       reg : Specifies base physical address and size of the register sets for
             the clock event device and clock source device.
     
-    And existed dts provide two reg MMIO spaces. So change to use items to
-    descript reg property.
+    And existing DTS drivers provide two 'reg' MMIO spaces. So change
+    this driver to use 'items' to describe the 'reg' property.
     
-    Update examples.
+    Update examples as well.
     
     Fixes: 8fc30d8f8e86 ("dt-bindings: timer: fsl,ftm-timer: Convert to dtschema")
-    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
     Signed-off-by: Frank Li <Frank.Li@nxp.com>
-    Link: https://lore.kernel.org/r/20250523141437.533643-1-Frank.Li@nxp.com
     Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+    Link: https://lore.kernel.org/r/20250523141437.533643-1-Frank.Li@nxp.com
 
 Author: Max Shevchenko <wctrl@proton.me>
 Date:   Wed Jul 2 13:50:40 2025 +0300
 
-    dt-bindings: timer: mediatek: add MT6572
+    dt-bindings: timer: mediatek: Add MT6572
     
     Add a compatible string for timer on the MT6572 SoC.
     
+    Signed-off-by: Max Shevchenko <wctrl@proton.me>
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
     Acked-by: Rob Herring (Arm) <robh@kernel.org>
-    Signed-off-by: Max Shevchenko <wctrl@proton.me>
     Link: https://lore.kernel.org/r/20250702-mt6572-v4-3-bde75b7ed445@proton.me
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Rob Herring (Arm) <robh@kernel.org>
 Date:   Wed Jun 11 18:26:20 2025 -0500
@@ -349,30 +372,32 @@ Date:   Wed Jun 11 18:26:20 2025 -0500
     interrupts can also be anywhere from 1 to 8. The clock-names order was
     reversed compared to what's used.
     
-    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
     Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
-    Link: https://lore.kernel.org/r/20250611232621.1508116-1-robh@kernel.org
     Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
+    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
+    Link: https://lore.kernel.org/r/20250611232621.1508116-1-robh@kernel.org
 
 Author: Daniel Lezcano <daniel.lezcano@linaro.org>
 Date:   Mon Jun 2 17:18:51 2025 +0200
 
-    time/sched_clock: Export symbol for sched_clock register function
+    time/sched_clock: Export symbol for sched_clock_register() function
     
-    The timer drivers could be converted into modules. The different
+    Timer drivers could be converted into modules. The different
     functions to register the clocksource or the clockevent are already
-    exporting their symbols for modules but the sched_clock_register()
+    exporting their symbols for modules, but the sched_clock_register()
     function is missing.
     
-    Export the symbols so the drivers using this function can be converted
+    Export the symbol so the drivers using this function can be converted
     into modules.
     
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Will McVicker <willmcvicker@google.com>
-    Acked-by: John Stultz <jstultz@google.com>
     Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
     Reviewed-by: Carlos Llamas <cmllamas@google.com>
+    Acked-by: John Stultz <jstultz@google.com>
     Link: https://lore.kernel.org/r/20250602151853.1942521-8-daniel.lezcano@linaro.org
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Daniel Lezcano <daniel.lezcano@linaro.org>
 Date:   Mon Jun 2 17:18:50 2025 +0200
@@ -381,7 +406,7 @@ Date:   Mon Jun 2 17:18:50 2025 +0200
     
     The conversion to modules requires a correct handling of the module
     refcount in order to prevent to unload it if it is in use. That is
-    especially true with the clockevents where there is no function to
+    especially true with clockevents where there is no function to
     unregister them.
     
     The core time framework correctly handles the module refcount with the
@@ -391,9 +416,10 @@ Date:   Mon Jun 2 17:18:50 2025 +0200
     stupid things happening when the driver will be converted into a
     module.
     
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Will McVicker <willmcvicker@google.com>
     Link: https://lore.kernel.org/r/20250602151853.1942521-7-daniel.lezcano@linaro.org
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Daniel Lezcano <daniel.lezcano@linaro.org>
 Date:   Mon Jun 2 17:18:49 2025 +0200
@@ -402,7 +428,7 @@ Date:   Mon Jun 2 17:18:49 2025 +0200
     
     The conversion to modules requires a correct handling of the module
     refcount in order to prevent to unload it if it is in use. That is
-    especially true with the clockevents where there is no function to
+    especially true with clockevents where there is no function to
     unregister them.
     
     The core time framework correctly handles the module refcount with the
@@ -412,9 +438,10 @@ Date:   Mon Jun 2 17:18:49 2025 +0200
     stupid things happening when the driver will be converted into a
     module.
     
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Will McVicker <willmcvicker@google.com>
     Link: https://lore.kernel.org/r/20250602151853.1942521-6-daniel.lezcano@linaro.org
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Daniel Lezcano <daniel.lezcano@linaro.org>
 Date:   Mon Jun 2 17:18:48 2025 +0200
@@ -423,7 +450,7 @@ Date:   Mon Jun 2 17:18:48 2025 +0200
     
     The conversion to modules requires a correct handling of the module
     refcount in order to prevent to unload it if it is in use. That is
-    especially true with the clockevents where there is no function to
+    especially true with clockevents where there is no function to
     unregister them.
     
     The core time framework correctly handles the module refcount with the
@@ -433,9 +460,10 @@ Date:   Mon Jun 2 17:18:48 2025 +0200
     stupid things happening when the driver will be converted into a
     module.
     
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Will McVicker <willmcvicker@google.com>
     Link: https://lore.kernel.org/r/20250602151853.1942521-5-daniel.lezcano@linaro.org
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Daniel Lezcano <daniel.lezcano@linaro.org>
 Date:   Mon Jun 2 17:18:47 2025 +0200
@@ -444,7 +472,7 @@ Date:   Mon Jun 2 17:18:47 2025 +0200
     
     The conversion to modules requires a correct handling of the module
     refcount in order to prevent to unload it if it is in use. That is
-    especially true with the clockevents where there is no function to
+    especially true with clockevents where there is no function to
     unregister them.
     
     The core time framework correctly handles the module refcount with the
@@ -454,10 +482,11 @@ Date:   Mon Jun 2 17:18:47 2025 +0200
     stupid things happening when the driver will be converted into a
     module.
     
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Will McVicker <willmcvicker@google.com>
     Acked-by: Chen-Yu Tsai <wens@csie.org>
     Link: https://lore.kernel.org/r/20250602151853.1942521-4-daniel.lezcano@linaro.org
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Daniel Lezcano <daniel.lezcano@linaro.org>
 Date:   Mon Jun 2 17:18:46 2025 +0200
@@ -466,7 +495,7 @@ Date:   Mon Jun 2 17:18:46 2025 +0200
     
     The conversion to modules requires a correct handling of the module
     refcount in order to prevent to unload it if it is in use. That is
-    especially true with the clockevents where there is no function to
+    especially true with clockevents where there is no function to
     unregister them.
     
     The core time framework correctly handles the module refcount with the
@@ -476,9 +505,10 @@ Date:   Mon Jun 2 17:18:46 2025 +0200
     stupid things happening when the driver will be converted into a
     module.
     
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Will McVicker <willmcvicker@google.com>
     Link: https://lore.kernel.org/r/20250602151853.1942521-3-daniel.lezcano@linaro.org
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
 
 Author: Daniel Lezcano <daniel.lezcano@linaro.org>
 Date:   Mon Jun 2 17:18:45 2025 +0200
@@ -487,7 +517,7 @@ Date:   Mon Jun 2 17:18:45 2025 +0200
     
     The conversion to modules requires a correct handling of the module
     refcount in order to prevent to unload it if it is in use. That is
-    especially true with the clockevents where there is no function to
+    especially true with clockevents where there is no function to
     unregister them.
     
     The core time framework correctly handles the module refcount with the
@@ -497,6 +527,7 @@ Date:   Mon Jun 2 17:18:45 2025 +0200
     stupid things happening when the driver will be converted into a
     module.
     
+    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
+    Signed-off-by: Ingo Molnar <mingo@kernel.org>
     Reviewed-by: Will McVicker <willmcvicker@google.com>
     Link: https://lore.kernel.org/r/20250602151853.1942521-2-daniel.lezcano@linaro.org
-    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-25 10:34         ` Ingo Molnar
@ 2025-07-25 13:15           ` Daniel Lezcano
  2025-07-29  7:58             ` Daniel Lezcano
  0 siblings, 1 reply; 45+ messages in thread
From: Daniel Lezcano @ 2025-07-25 13:15 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Thomas Gleixner, linux-tip-commits, Donghoon Yu,
	Youngmin Nam, John Stultz, Will McVicker, x86,
	Krzysztof Kozlowski, Arnd Bergmann

On 25/07/2025 12:34, Ingo Molnar wrote:
> 
> * Daniel Lezcano <daniel.lezcano@linaro.org> wrote:

[ ... ]

>>> 3)
>>>
>>> There's also a stray Tested-by tag by one of the SOB entries:
>>>
>>>> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
>>>> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
>>>> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
>>>
>>> When someone passes along a patch, it's implicit that they not only
>>> have reviewed the patch, but have also tested it to a certain extent
>>
>> In this specific case where the original commit is from AOSP, this chain
>> seems to make sense. Souns like:
>>
>> "I was in the original commit delivery path"
>> "I reviewed this patch carried to Linux"
>> "I tested it on Linux"
> 
> Yeah, so then this should be documented by adding a comment to the tag
> itself:
> 
>      Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
>      Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
>      Signed-off-by: Will McVicker <willmcvicker@google.com>
>      Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>      Tested-by: Youngmin Nam <youngmin.nam@samsung.com>   # AOSP -> Linux port
>      Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com> # AOSP -> Linux port
> 
> Otherwise it's just confusing as to why there's duplicate SOB and
> Reviewed-by entries.

Yes, I agree it is more clear.

> But as long as the porting was basically just a cherry-pick, these
> extra tags are probably superfluous. If there was a conflict resolved
> by one of the maintainers along the SOB chain, that should be marked
> explicitly, which I see was already done in some cases:
> 
>      [ dlezcano : Fixed conflict with 20250614175556.922159-2-linux@roeck-us.net ]

Ok, noted for the next time.

>>> 4)
>>>
>>> Why is the 'Link' tag just in the middle of the SOB chain, instead at the end of it?
>>
>> I don't know. Link must be at the end  It is stated somewhere in the
>> documentation?
>>
>> I use git b4 -s <msg-id> and the tool adds the Link then my sign off.
> 
> Yeah, so using tools and not looking at the end result will often just
> create a random tag order that looks messy.
> 
> On preferred tag ordering, see:
> 
>    Documentation/process/maintainer-tip.rst
> 
>    Ordering of commit tags
>    ^^^^^^^^^^^^^^^^^^^^^^^
>    ...
> 
> 'Link' is at the end of the list of tags.
> 
> There's some logic to the -tip tag ordering (more important tags go
> before less important tags), but it's mostly just an arbitrary order
> that we try to stick to within -tip.

Thanks for the pointer !

>>> Presumably this is the proper SOB chain:
>>>
>>>> Author:        Donghoon Yu <hoony.yu@samsung.com>
>>>
>>>> Signed-off-by: Donghoon Yu <hoony.yu@samsung.com>
>>>> Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
>>>> Signed-off-by: Will McVicker <willmcvicker@google.com>
>>>> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
>>>> Acked-by: John Stultz <jstultz@google.com>
>>>> Link: https://lore.kernel.org/r/20250620181719.1399856-3-willmcvicker@google.com
>>>
>>> Correct?
>>
>>
> 
> So I got no answer for this question, but I suppose my assumption is
> correct - so I've rebased the tip:timers/clocksource commits to fix the
> misattribution and a number of other problems, and also fixed various
> typos, spelling mistakes and inconsistencies in the changelogs while at
> it. Let me know if I got something wrong.

If the rebase is possible, I suggest to take the opportunity to remove 
the following patches:

commit 5d86e479193b - clocksource/drivers/exynos_mct: Add module support
commit 7e477e9c4eb4 - clocksource/drivers/exynos_mct: Fix section 
mismatch from the module conversion

Because of:

[1] 
https://lore.kernel.org/all/20250725090349.87730-2-krzysztof.kozlowski@linaro.org/

[2] 
https://lore.kernel.org/all/bccb77b9-7cdc-4965-aa05-05836466f81f@app.fastmail.com/


> I've attached a delta-patch of the changelog changes below - note that
> I skipped the commit IDs to make the diff easier to read.

I have one question regarding the 'handler', when there is a message like:

[ handler: I did some changes ]

...

Signed-off-by: John Doe <handler@kernel.org>

Does the 'handler' have to match the email name ?

For example below, there is:

[ dlezcano : Fixed conflict with 
20250614175556.922159-2-linux@roeck-us.net ]

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>


Is this form ok, or should it be:

[ daniel.lezcano: Fixed conflict with 
20250614175556.922159-2-linux@roeck-us.net ]

?

> ===================>
> ---	2025-07-25 12:15:26.024284067 +0200
> +++	2025-07-25 12:15:18.761435799 +0200
> @@ -10,6 +10,7 @@ Date:   Tue Jul 15 14:18:33 2025 +0200
>       the module loading.
>       
>       Fix this by adding the __init_or_module annotation for the functions:
> +

If my understanding of the documentation is correct, it seems to me the 
delta is ok. Until now, I was relying on the tool to put the different 
tags in the correct order, I thought it was in the arrival order.

Thanks for fixing this. Is there an existing script checking the tags 
order is correct regarding the tip criteria ?

Thanks
   -- Daniel

-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-25 13:15           ` Daniel Lezcano
@ 2025-07-29  7:58             ` Daniel Lezcano
  2025-07-29  8:58               ` Thomas Gleixner
  0 siblings, 1 reply; 45+ messages in thread
From: Daniel Lezcano @ 2025-07-29  7:58 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: linux-kernel, Thomas Gleixner, linux-tip-commits, Donghoon Yu,
	Youngmin Nam, John Stultz, Will McVicker, x86,
	Krzysztof Kozlowski, Arnd Bergmann


Hi Ingo,

just a gentle ping for the question below about dropping the two patches.


On 25/07/2025 15:15, Daniel Lezcano wrote:

[ ... ]

>> So I got no answer for this question, but I suppose my assumption is
>> correct - so I've rebased the tip:timers/clocksource commits to fix the
>> misattribution and a number of other problems, and also fixed various
>> typos, spelling mistakes and inconsistencies in the changelogs while at
>> it. Let me know if I got something wrong.
> 
> If the rebase is possible, I suggest to take the opportunity to remove 
> the following patches:
> 
> commit 5d86e479193b - clocksource/drivers/exynos_mct: Add module support
> commit 7e477e9c4eb4 - clocksource/drivers/exynos_mct: Fix section 
> mismatch from the module conversion
> 
> Because of:
> 
> [1] https://lore.kernel.org/all/20250725090349.87730-2- 
> krzysztof.kozlowski@linaro.org/
> 
> [2] https://lore.kernel.org/all/bccb77b9-7cdc-4965- 
> aa05-05836466f81f@app.fastmail.com/

[ ... ]

-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-29  7:58             ` Daniel Lezcano
@ 2025-07-29  8:58               ` Thomas Gleixner
  2025-07-29  9:03                 ` Thomas Gleixner
  2025-07-29  9:13                 ` Daniel Lezcano
  0 siblings, 2 replies; 45+ messages in thread
From: Thomas Gleixner @ 2025-07-29  8:58 UTC (permalink / raw)
  To: Daniel Lezcano, Ingo Molnar
  Cc: linux-kernel, linux-tip-commits, Donghoon Yu, Youngmin Nam,
	John Stultz, Will McVicker, x86, Krzysztof Kozlowski,
	Arnd Bergmann

On Tue, Jul 29 2025 at 09:58, Daniel Lezcano wrote:
> just a gentle ping for the question below about dropping the two patches.
>
> On 25/07/2025 15:15, Daniel Lezcano wrote:
>
> [ ... ]
>
>>> So I got no answer for this question, but I suppose my assumption is
>>> correct - so I've rebased the tip:timers/clocksource commits to fix the
>>> misattribution and a number of other problems, and also fixed various
>>> typos, spelling mistakes and inconsistencies in the changelogs while at
>>> it. Let me know if I got something wrong.
>> 
>> If the rebase is possible, I suggest to take the opportunity to remove 
>> the following patches:
>> 
>> commit 5d86e479193b - clocksource/drivers/exynos_mct: Add module support
>> commit 7e477e9c4eb4 - clocksource/drivers/exynos_mct: Fix section 
>> mismatch from the module conversion
>> 
>> Because of:
>> 
>> [1] https://lore.kernel.org/all/20250725090349.87730-2- 
>> krzysztof.kozlowski@linaro.org/
>> 
>> [2] https://lore.kernel.org/all/bccb77b9-7cdc-4965- 
>> aa05-05836466f81f@app.fastmail.com/

Grrr.

I've already sent the pull request for the pile. Let me ask Linus not to
pull and I revert them on top.

Also please reset your clockevents branch so next does not have the
conflicting SHAs

Thanks,

        tglx



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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-29  8:58               ` Thomas Gleixner
@ 2025-07-29  9:03                 ` Thomas Gleixner
  2025-07-29  9:07                   ` Krzysztof Kozlowski
  2025-07-29  9:13                 ` Daniel Lezcano
  1 sibling, 1 reply; 45+ messages in thread
From: Thomas Gleixner @ 2025-07-29  9:03 UTC (permalink / raw)
  To: Daniel Lezcano, Ingo Molnar
  Cc: linux-kernel, linux-tip-commits, Donghoon Yu, Youngmin Nam,
	John Stultz, Will McVicker, x86, Krzysztof Kozlowski,
	Arnd Bergmann

On Tue, Jul 29 2025 at 10:58, Thomas Gleixner wrote:

> On Tue, Jul 29 2025 at 09:58, Daniel Lezcano wrote:
>> just a gentle ping for the question below about dropping the two patches.
>>
>> On 25/07/2025 15:15, Daniel Lezcano wrote:
>>
>> [ ... ]
>>
>>>> So I got no answer for this question, but I suppose my assumption is
>>>> correct - so I've rebased the tip:timers/clocksource commits to fix the
>>>> misattribution and a number of other problems, and also fixed various
>>>> typos, spelling mistakes and inconsistencies in the changelogs while at
>>>> it. Let me know if I got something wrong.
>>> 
>>> If the rebase is possible, I suggest to take the opportunity to remove 
>>> the following patches:
>>> 
>>> commit 5d86e479193b - clocksource/drivers/exynos_mct: Add module support
>>> commit 7e477e9c4eb4 - clocksource/drivers/exynos_mct: Fix section 
>>> mismatch from the module conversion
>>> 
>>> Because of:
>>> 
>>> [1] https://lore.kernel.org/all/20250725090349.87730-2- 
>>> krzysztof.kozlowski@linaro.org/
>>> 
>>> [2] https://lore.kernel.org/all/bccb77b9-7cdc-4965- 
>>> aa05-05836466f81f@app.fastmail.com/
>
> Grrr.
>
> I've already sent the pull request for the pile. Let me ask Linus not to
> pull and I revert them on top.

That requires to revert 2798e90b4e09 ("arm64: exynos: Drop select CLKSRC_EXYNOS_MCT")
as well, no?

Thanks,

        tglx

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-29  9:03                 ` Thomas Gleixner
@ 2025-07-29  9:07                   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 45+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-29  9:07 UTC (permalink / raw)
  To: Thomas Gleixner, Daniel Lezcano, Ingo Molnar
  Cc: linux-kernel, linux-tip-commits, Donghoon Yu, Youngmin Nam,
	John Stultz, Will McVicker, x86, Arnd Bergmann

On 29/07/2025 11:03, Thomas Gleixner wrote:
> On Tue, Jul 29 2025 at 10:58, Thomas Gleixner wrote:
> 
>> On Tue, Jul 29 2025 at 09:58, Daniel Lezcano wrote:
>>> just a gentle ping for the question below about dropping the two patches.
>>>
>>> On 25/07/2025 15:15, Daniel Lezcano wrote:
>>>
>>> [ ... ]
>>>
>>>>> So I got no answer for this question, but I suppose my assumption is
>>>>> correct - so I've rebased the tip:timers/clocksource commits to fix the
>>>>> misattribution and a number of other problems, and also fixed various
>>>>> typos, spelling mistakes and inconsistencies in the changelogs while at
>>>>> it. Let me know if I got something wrong.
>>>>
>>>> If the rebase is possible, I suggest to take the opportunity to remove 
>>>> the following patches:
>>>>
>>>> commit 5d86e479193b - clocksource/drivers/exynos_mct: Add module support
>>>> commit 7e477e9c4eb4 - clocksource/drivers/exynos_mct: Fix section 
>>>> mismatch from the module conversion
>>>>
>>>> Because of:
>>>>
>>>> [1] https://lore.kernel.org/all/20250725090349.87730-2- 
>>>> krzysztof.kozlowski@linaro.org/
>>>>
>>>> [2] https://lore.kernel.org/all/bccb77b9-7cdc-4965- 
>>>> aa05-05836466f81f@app.fastmail.com/
>>
>> Grrr.
>>
>> I've already sent the pull request for the pile. Let me ask Linus not to
>> pull and I revert them on top.
> 
> That requires to revert 2798e90b4e09 ("arm64: exynos: Drop select CLKSRC_EXYNOS_MCT")
> as well, no?

Yes, indeed, I missed that.

Best regards,
Krzysztof

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-29  8:58               ` Thomas Gleixner
  2025-07-29  9:03                 ` Thomas Gleixner
@ 2025-07-29  9:13                 ` Daniel Lezcano
  2025-07-29 16:13                   ` Thomas Gleixner
  1 sibling, 1 reply; 45+ messages in thread
From: Daniel Lezcano @ 2025-07-29  9:13 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar
  Cc: linux-kernel, linux-tip-commits, Donghoon Yu, Youngmin Nam,
	John Stultz, Will McVicker, x86, Krzysztof Kozlowski,
	Arnd Bergmann

On 29/07/2025 10:58, Thomas Gleixner wrote:
> On Tue, Jul 29 2025 at 09:58, Daniel Lezcano wrote:
>> just a gentle ping for the question below about dropping the two patches.
>>
>> On 25/07/2025 15:15, Daniel Lezcano wrote:
>>
>> [ ... ]
>>
>>>> So I got no answer for this question, but I suppose my assumption is
>>>> correct - so I've rebased the tip:timers/clocksource commits to fix the
>>>> misattribution and a number of other problems, and also fixed various
>>>> typos, spelling mistakes and inconsistencies in the changelogs while at
>>>> it. Let me know if I got something wrong.
>>>
>>> If the rebase is possible, I suggest to take the opportunity to remove
>>> the following patches:
>>>
>>> commit 5d86e479193b - clocksource/drivers/exynos_mct: Add module support
>>> commit 7e477e9c4eb4 - clocksource/drivers/exynos_mct: Fix section
>>> mismatch from the module conversion
>>>
>>> Because of:
>>>
>>> [1] https://lore.kernel.org/all/20250725090349.87730-2-
>>> krzysztof.kozlowski@linaro.org/
>>>
>>> [2] https://lore.kernel.org/all/bccb77b9-7cdc-4965-
>>> aa05-05836466f81f@app.fastmail.com/
> 
> Grrr.
> 
> I've already sent the pull request for the pile. Let me ask Linus not to
> pull and I revert them on top.
> 
> Also please reset your clockevents branch so next does not have the
> conflicting SHAs

There is revert otherwise above [1]

Branch reset to v6.16-rc5

-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-29  9:13                 ` Daniel Lezcano
@ 2025-07-29 16:13                   ` Thomas Gleixner
  2025-07-29 16:27                     ` Daniel Lezcano
  0 siblings, 1 reply; 45+ messages in thread
From: Thomas Gleixner @ 2025-07-29 16:13 UTC (permalink / raw)
  To: Daniel Lezcano, Ingo Molnar
  Cc: linux-kernel, linux-tip-commits, Donghoon Yu, Youngmin Nam,
	John Stultz, Will McVicker, x86, Krzysztof Kozlowski,
	Arnd Bergmann

On Tue, Jul 29 2025 at 11:13, Daniel Lezcano wrote:
> On 29/07/2025 10:58, Thomas Gleixner wrote:
>> On Tue, Jul 29 2025 at 09:58, Daniel Lezcano wrote:
>>> just a gentle ping for the question below about dropping the two patches.
>>>
>>> On 25/07/2025 15:15, Daniel Lezcano wrote:
>>>
>>> [ ... ]
>>>
>>>>> So I got no answer for this question, but I suppose my assumption is
>>>>> correct - so I've rebased the tip:timers/clocksource commits to fix the
>>>>> misattribution and a number of other problems, and also fixed various
>>>>> typos, spelling mistakes and inconsistencies in the changelogs while at
>>>>> it. Let me know if I got something wrong.
>>>>
>>>> If the rebase is possible, I suggest to take the opportunity to remove
>>>> the following patches:
>>>>
>>>> commit 5d86e479193b - clocksource/drivers/exynos_mct: Add module support
>>>> commit 7e477e9c4eb4 - clocksource/drivers/exynos_mct: Fix section
>>>> mismatch from the module conversion
>>>>
>>>> Because of:
>>>>
>>>> [1] https://lore.kernel.org/all/20250725090349.87730-2-
>>>> krzysztof.kozlowski@linaro.org/
>>>>
>>>> [2] https://lore.kernel.org/all/bccb77b9-7cdc-4965-
>>>> aa05-05836466f81f@app.fastmail.com/
>> 
>> Grrr.
>> 
>> I've already sent the pull request for the pile. Let me ask Linus not to
>> pull and I revert them on top.
>> 
>> Also please reset your clockevents branch so next does not have the
>> conflicting SHAs
>
> There is revert otherwise above [1]

It's incomplete :)

I just reverted all three exynos mct related changes on top of the
timers/clocksource branch and pushed the result out.

Thanks,

        tglx

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

* Re: [tip: timers/clocksource] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64
  2025-07-29 16:13                   ` Thomas Gleixner
@ 2025-07-29 16:27                     ` Daniel Lezcano
  0 siblings, 0 replies; 45+ messages in thread
From: Daniel Lezcano @ 2025-07-29 16:27 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar
  Cc: linux-kernel, linux-tip-commits, Donghoon Yu, Youngmin Nam,
	John Stultz, Will McVicker, x86, Krzysztof Kozlowski,
	Arnd Bergmann

On 29/07/2025 18:13, Thomas Gleixner wrote:
> On Tue, Jul 29 2025 at 11:13, Daniel Lezcano wrote:
>> On 29/07/2025 10:58, Thomas Gleixner wrote:
>>> On Tue, Jul 29 2025 at 09:58, Daniel Lezcano wrote:
>>>> just a gentle ping for the question below about dropping the two patches.
>>>>
>>>> On 25/07/2025 15:15, Daniel Lezcano wrote:
>>>>
>>>> [ ... ]
>>>>
>>>>>> So I got no answer for this question, but I suppose my assumption is
>>>>>> correct - so I've rebased the tip:timers/clocksource commits to fix the
>>>>>> misattribution and a number of other problems, and also fixed various
>>>>>> typos, spelling mistakes and inconsistencies in the changelogs while at
>>>>>> it. Let me know if I got something wrong.
>>>>>
>>>>> If the rebase is possible, I suggest to take the opportunity to remove
>>>>> the following patches:
>>>>>
>>>>> commit 5d86e479193b - clocksource/drivers/exynos_mct: Add module support
>>>>> commit 7e477e9c4eb4 - clocksource/drivers/exynos_mct: Fix section
>>>>> mismatch from the module conversion
>>>>>
>>>>> Because of:
>>>>>
>>>>> [1] https://lore.kernel.org/all/20250725090349.87730-2-
>>>>> krzysztof.kozlowski@linaro.org/
>>>>>
>>>>> [2] https://lore.kernel.org/all/bccb77b9-7cdc-4965-
>>>>> aa05-05836466f81f@app.fastmail.com/
>>>
>>> Grrr.
>>>
>>> I've already sent the pull request for the pile. Let me ask Linus not to
>>> pull and I revert them on top.
>>>
>>> Also please reset your clockevents branch so next does not have the
>>> conflicting SHAs
>>
>> There is revert otherwise above [1]
> 
> It's incomplete :)
> 
> I just reverted all three exynos mct related changes on top of the
> timers/clocksource branch and pushed the result out.


Thanks, sorry for the mess


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* Re: [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu
  2025-06-20 18:17 ` [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu Will McVicker
  2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Hosung Kim
  2025-07-25 10:31   ` tip-bot2 for Hosung Kim
@ 2025-08-26 13:51   ` Marek Szyprowski
  2 siblings, 0 replies; 45+ messages in thread
From: Marek Szyprowski @ 2025-08-26 13:51 UTC (permalink / raw)
  To: Will McVicker, Catalin Marinas, Will Deacon, Daniel Lezcano,
	Thomas Gleixner, Krzysztof Kozlowski, Alim Akhtar, Rob Herring,
	Saravana Kannan
  Cc: Donghoon Yu, kernel-team, linux-arm-kernel, linux-kernel,
	John Stultz, Youngmin Nam, Peter Griffin, Tudor Ambarus,
	André Draszik, Conor Dooley, linux-samsung-soc, devicetree

On 20.06.2025 20:17, Will McVicker wrote:
> From: Hosung Kim <hosung0.kim@samsung.com>
>
> To allow the CPU to handle it's own clock events, we need to set the
> IRQF_PERCPU flag. This prevents the local timer interrupts from
> migrating to other CPUs.
>
> Signed-off-by: Hosung Kim <hosung0.kim@samsung.com>
> [Original commit from https://android.googlesource.com/kernel/gs/+/03267fad19f093bac979ca78309483e9eb3a8d16]
> Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
> Signed-off-by: Will McVicker <willmcvicker@google.com>

This patch has been merged some time ago to v6.17-rc1 as commit 
f3cec54ee3bf ("clocksource/drivers/exynos_mct: Set local timer 
interrupts as percpu"). Recently I found that it breaks CPU hotplug 
support for some 'little' cores on Exynos5422 based boards, like 
OdroidXU3/XU4:

# for i in /sys/devices/system/cpu/cpu[1-9]; do echo 0 >$i/online; done
# for i in /sys/devices/system/cpu/cpu[1-9]; do echo 1 >$i/online; done
[  117.100195] CPU2: failed to come online
-bash: echo: write error: Input/output error
[  118.140426] CPU3: failed to come online
-bash: echo: write error: Input/output error
[  118.148428] CPU4: detected I-Cache line size mismatch, workaround 
enabled
[  118.169613] CPU5: detected I-Cache line size mismatch, workaround 
enabled
[  118.216802] CPU6: detected I-Cache line size mismatch, workaround 
enabled
[  118.283725] CPU7: detected I-Cache line size mismatch, workaround 
enabled
#

Frankly speaking I have no idea why this happens. CPU hotplug was always 
broken for the CPU0, but this is not relevant for this case. Maybe this 
PERCPU flag should be applied only on ARM64-based boards to avoid 
affecting legacy ARM 32bit cases?

> ---
>   drivers/clocksource/exynos_mct.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
> index 96361d5dc57d..a5ef7d64b1c2 100644
> --- a/drivers/clocksource/exynos_mct.c
> +++ b/drivers/clocksource/exynos_mct.c
> @@ -596,7 +596,8 @@ static int __init exynos4_timer_interrupts(struct device_node *np,
>   			irq_set_status_flags(mct_irq, IRQ_NOAUTOEN);
>   			if (request_irq(mct_irq,
>   					exynos4_mct_tick_isr,
> -					IRQF_TIMER | IRQF_NOBALANCING,
> +					IRQF_TIMER | IRQF_NOBALANCING |
> +					IRQF_PERCPU,
>   					pcpu_mevt->name, pcpu_mevt)) {
>   				pr_err("exynos-mct: cannot register IRQ (cpu%d)\n",
>   									cpu);

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


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

end of thread, other threads:[~2025-08-26 13:51 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-20 18:17 [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Will McVicker
2025-06-20 18:17 ` [PATCH v4 1/6] of/irq: Export of_irq_count for modules Will McVicker
2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
2025-07-25 10:31   ` [tip: timers/clocksource] of/irq: Export of_irq_count() " tip-bot2 for Will McVicker
2025-06-20 18:17 ` [PATCH v4 2/6] clocksource/drivers/exynos_mct: Don't register as a sched_clock on arm64 Will McVicker
2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
2025-07-24  5:16     ` Ingo Molnar
2025-07-24  5:20       ` Ingo Molnar
2025-07-24  9:25         ` Thomas Gleixner
2025-07-24 10:04       ` Daniel Lezcano
2025-07-25 10:34         ` Ingo Molnar
2025-07-25 13:15           ` Daniel Lezcano
2025-07-29  7:58             ` Daniel Lezcano
2025-07-29  8:58               ` Thomas Gleixner
2025-07-29  9:03                 ` Thomas Gleixner
2025-07-29  9:07                   ` Krzysztof Kozlowski
2025-07-29  9:13                 ` Daniel Lezcano
2025-07-29 16:13                   ` Thomas Gleixner
2025-07-29 16:27                     ` Daniel Lezcano
2025-07-25 10:31   ` tip-bot2 for Donghoon Yu
2025-06-20 18:17 ` [PATCH v4 3/6] clocksource/drivers/exynos_mct: Set local timer interrupts as percpu Will McVicker
2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Hosung Kim
2025-07-25 10:31   ` tip-bot2 for Hosung Kim
2025-08-26 13:51   ` [PATCH v4 3/6] " Marek Szyprowski
2025-06-20 18:17 ` [PATCH v4 4/6] clocksource/drivers/exynos_mct: Fix uninitialized irq name warning Will McVicker
2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
2025-07-25 10:31   ` [tip: timers/clocksource] clocksource/drivers/exynos_mct: Fix uninitialized IRQ " tip-bot2 for Will McVicker
2025-06-20 18:17 ` [PATCH v4 5/6] clocksource/drivers/exynos_mct: Add module support Will McVicker
2025-06-24 13:48   ` Daniel Lezcano
2025-06-24 23:47     ` William McVicker
2025-06-25  9:23       ` Daniel Lezcano
2025-07-15 12:18   ` [PATCH] clocksource/drivers/exynos_mct: Fix section mismatch from the module conversion Daniel Lezcano
2025-07-15 17:23     ` William McVicker
2025-07-18  9:53     ` Arnd Bergmann
2025-07-23  7:17     ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-25  8:48     ` [PATCH] " Krzysztof Kozlowski
2025-07-25  8:52       ` Krzysztof Kozlowski
2025-07-25 10:31     ` [tip: timers/clocksource] " tip-bot2 for Daniel Lezcano
2025-07-23  7:17   ` [tip: timers/clocksource] clocksource/drivers/exynos_mct: Add module support tip-bot2 for Donghoon Yu
2025-07-25  9:40   ` [PATCH v4 5/6] " Daniel Lezcano
2025-07-25 10:31   ` [tip: timers/clocksource] " tip-bot2 for Donghoon Yu
2025-06-20 18:17 ` [PATCH v4 6/6] arm64: exynos: Drop select CLKSRC_EXYNOS_MCT Will McVicker
2025-07-23  7:17   ` [tip: timers/clocksource] " tip-bot2 for Will McVicker
2025-07-25 10:31   ` tip-bot2 for Will McVicker
2025-07-15 11:03 ` [PATCH v4 0/6] Add module support for Arm64 Exynos MCT driver Daniel Lezcano

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).