arch/arm64/Kconfig.platforms | 1 - arch/arm64/boot/dts/exynos/google/gs101.dtsi | 3 + drivers/clocksource/Kconfig | 3 +- drivers/clocksource/exynos_mct.c | 73 ++++++++++++++++---- drivers/of/irq.c | 1 + 5 files changed, 67 insertions(+), 14 deletions(-)
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
seris with the upstream kernel on my Pixel 6 Pro.
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 linux-next/master commit 405e2241def8 ("Add
linux-next specific files for 20250331").
[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
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: 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 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 Deacon (1):
arm64: dts: exynos: gs101: Add 'local-timer-stop' to cpuidle nodes
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 -
arch/arm64/boot/dts/exynos/google/gs101.dtsi | 3 +
drivers/clocksource/Kconfig | 3 +-
drivers/clocksource/exynos_mct.c | 73 ++++++++++++++++----
drivers/of/irq.c | 1 +
5 files changed, 67 insertions(+), 14 deletions(-)
--
2.49.0.472.ge94155a9ec-goog
On Wed, Apr 02, 2025 at 04:33:51PM -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
> seris with the upstream kernel on my Pixel 6 Pro.
>
> 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 linux-next/master commit 405e2241def8 ("Add
> linux-next specific files for 20250331").
>
> [1] https://android.googlesource.com/kernel/gs/+log/refs/heads/android-gs-raviole-5.10-android12-d1
> [2] https://protect2.fireeye.com/v1/url?k=d287bb1b-b30cae21-d2863054-74fe4860008a-f0cb7ae29f3b1b85&q=1&e=4e8467a4-13da-4dd4-a8fd-4ddfc38e89b4&u=https%3A%2F%2Fgit.codelinaro.org%2Flinaro%2Fgooglelt%2Fpixelscripts%2F-%2Fblob%2Fclo%2Fmain%2FREADME.md%3Fref_type%3Dheads
>
> 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: 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 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 Deacon (1):
> arm64: dts: exynos: gs101: Add 'local-timer-stop' to cpuidle nodes
>
> 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 -
> arch/arm64/boot/dts/exynos/google/gs101.dtsi | 3 +
> drivers/clocksource/Kconfig | 3 +-
> drivers/clocksource/exynos_mct.c | 73 ++++++++++++++++----
> drivers/of/irq.c | 1 +
> 5 files changed, 67 insertions(+), 14 deletions(-)
>
> --
> 2.49.0.472.ge94155a9ec-goog
>
>
Hi Will.
I tested this series on a E850-96(Exynos3830 based) board and it's working as a moudle.
# dmesg | grep mct
[7.376224] clocksource: mct-frc: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 73510017198 ns
# lsmod | grep exynos_mct
exynos_mct 12288 0
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
arch_sys_counter
# cat /sys/devices/system/clockevents/clockevent0/current_device
arch_sys_timer
# cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
12: 2566 2752 2467 4026 3372 2822 2115 3227 GIC-0 27 Level arch_timer
...
77: 0 0 0 0 0 0 0 0 GIC-0 235 Level mct_comp_irq
78: 0 0 0 0 0 0 0 0 GIC-0 239 Level mct_tick0
79: 0 0 0 0 0 0 0 0 GIC-0 240 Level mct_tick1
80: 0 0 0 0 0 0 0 0 GIC-0 241 Level mct_tick2
81: 0 0 0 0 0 0 0 0 GIC-0 242 Level mct_tick3
82: 0 0 0 0 0 0 0 0 GIC-0 243 Level mct_tick4
83: 0 0 0 0 0 0 0 0 GIC-0 244 Level mct_tick5
84: 0 0 0 0 0 0 0 0 GIC-0 245 Level mct_tick6
85: 0 0 0 0 0 0 0 0 GIC-0 246 Level mct_tick7
Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Thanks,
Youngmin
On 04/04/2025, Youngmin Nam wrote:
> On Wed, Apr 02, 2025 at 04:33:51PM -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
> > seris with the upstream kernel on my Pixel 6 Pro.
> >
> > 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 linux-next/master commit 405e2241def8 ("Add
> > linux-next specific files for 20250331").
> >
> > [1] https://android.googlesource.com/kernel/gs/+log/refs/heads/android-gs-raviole-5.10-android12-d1
> > [2] https://protect2.fireeye.com/v1/url?k=d287bb1b-b30cae21-d2863054-74fe4860008a-f0cb7ae29f3b1b85&q=1&e=4e8467a4-13da-4dd4-a8fd-4ddfc38e89b4&u=https%3A%2F%2Fgit.codelinaro.org%2Flinaro%2Fgooglelt%2Fpixelscripts%2F-%2Fblob%2Fclo%2Fmain%2FREADME.md%3Fref_type%3Dheads
> >
> > 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: 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 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 Deacon (1):
> > arm64: dts: exynos: gs101: Add 'local-timer-stop' to cpuidle nodes
> >
> > 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 -
> > arch/arm64/boot/dts/exynos/google/gs101.dtsi | 3 +
> > drivers/clocksource/Kconfig | 3 +-
> > drivers/clocksource/exynos_mct.c | 73 ++++++++++++++++----
> > drivers/of/irq.c | 1 +
> > 5 files changed, 67 insertions(+), 14 deletions(-)
> >
> > --
> > 2.49.0.472.ge94155a9ec-goog
> >
> >
>
> Hi Will.
>
> I tested this series on a E850-96(Exynos3830 based) board and it's working as a moudle.
>
> # dmesg | grep mct
> [7.376224] clocksource: mct-frc: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 73510017198 ns
>
> # lsmod | grep exynos_mct
> exynos_mct 12288 0
>
> # cat /sys/devices/system/clocksource/clocksource0/current_clocksource
> arch_sys_counter
> # cat /sys/devices/system/clockevents/clockevent0/current_device
> arch_sys_timer
>
> # cat /proc/interrupts
> CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
> 12: 2566 2752 2467 4026 3372 2822 2115 3227 GIC-0 27 Level arch_timer
> ...
> 77: 0 0 0 0 0 0 0 0 GIC-0 235 Level mct_comp_irq
> 78: 0 0 0 0 0 0 0 0 GIC-0 239 Level mct_tick0
> 79: 0 0 0 0 0 0 0 0 GIC-0 240 Level mct_tick1
> 80: 0 0 0 0 0 0 0 0 GIC-0 241 Level mct_tick2
> 81: 0 0 0 0 0 0 0 0 GIC-0 242 Level mct_tick3
> 82: 0 0 0 0 0 0 0 0 GIC-0 243 Level mct_tick4
> 83: 0 0 0 0 0 0 0 0 GIC-0 244 Level mct_tick5
> 84: 0 0 0 0 0 0 0 0 GIC-0 245 Level mct_tick6
> 85: 0 0 0 0 0 0 0 0 GIC-0 246 Level mct_tick7
>
> Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com>
> Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
>
> Thanks,
> Youngmin
Thanks Youngmin for the reviews and testing!
Regards,
Will
On 04/04/2025 03:11, Youngmin Nam wrote: >> >> -- >> 2.49.0.472.ge94155a9ec-goog >> >> > > Hi Will. > > I tested this series on a E850-96(Exynos3830 based) board and it's working as a moudle. Hi, On which kernel did you apply these patches for testing? > > # dmesg | grep mct > [7.376224] clocksource: mct-frc: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 73510017198 ns > > # lsmod | grep exynos_mct > exynos_mct 12288 0 > > # cat /sys/devices/system/clocksource/clocksource0/current_clocksource > arch_sys_counter > # cat /sys/devices/system/clockevents/clockevent0/current_device > arch_sys_timer > > # cat /proc/interrupts > CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 > 12: 2566 2752 2467 4026 3372 2822 2115 3227 GIC-0 27 Level arch_timer > ... > 77: 0 0 0 0 0 0 0 0 GIC-0 235 Level mct_comp_irq > 78: 0 0 0 0 0 0 0 0 GIC-0 239 Level mct_tick0 > 79: 0 0 0 0 0 0 0 0 GIC-0 240 Level mct_tick1 > 80: 0 0 0 0 0 0 0 0 GIC-0 241 Level mct_tick2 > 81: 0 0 0 0 0 0 0 0 GIC-0 242 Level mct_tick3 > 82: 0 0 0 0 0 0 0 0 GIC-0 243 Level mct_tick4 > 83: 0 0 0 0 0 0 0 0 GIC-0 244 Level mct_tick5 > 84: 0 0 0 0 0 0 0 0 GIC-0 245 Level mct_tick6 > 85: 0 0 0 0 0 0 0 0 GIC-0 246 Level mct_tick7 > > Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com> This means you reviewed *every* patch. > Tested-by: Youngmin Nam <youngmin.nam@samsung.com> Best regards, Krzysztof
On Fri, Apr 04, 2025 at 08:02:41AM +0200, Krzysztof Kozlowski wrote: > On 04/04/2025 03:11, Youngmin Nam wrote: > >> > >> -- > >> 2.49.0.472.ge94155a9ec-goog > >> > >> > > > > Hi Will. > > > > I tested this series on a E850-96(Exynos3830 based) board and it's working as a moudle. > > Hi, > > On which kernel did you apply these patches for testing? > Hi, I tested it on the latest torvalds tree. # uname -r 6.14.0-12893-g26d035c84315-dirty > > > > # dmesg | grep mct > > [7.376224] clocksource: mct-frc: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 73510017198 ns > > > > # lsmod | grep exynos_mct > > exynos_mct 12288 0 > > > > # cat /sys/devices/system/clocksource/clocksource0/current_clocksource > > arch_sys_counter > > # cat /sys/devices/system/clockevents/clockevent0/current_device > > arch_sys_timer > > > > # cat /proc/interrupts > > CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 > > 12: 2566 2752 2467 4026 3372 2822 2115 3227 GIC-0 27 Level arch_timer > > ... > > 77: 0 0 0 0 0 0 0 0 GIC-0 235 Level mct_comp_irq > > 78: 0 0 0 0 0 0 0 0 GIC-0 239 Level mct_tick0 > > 79: 0 0 0 0 0 0 0 0 GIC-0 240 Level mct_tick1 > > 80: 0 0 0 0 0 0 0 0 GIC-0 241 Level mct_tick2 > > 81: 0 0 0 0 0 0 0 0 GIC-0 242 Level mct_tick3 > > 82: 0 0 0 0 0 0 0 0 GIC-0 243 Level mct_tick4 > > 83: 0 0 0 0 0 0 0 0 GIC-0 244 Level mct_tick5 > > 84: 0 0 0 0 0 0 0 0 GIC-0 245 Level mct_tick6 > > 85: 0 0 0 0 0 0 0 0 GIC-0 246 Level mct_tick7 > > > > Reviewed-by: Youngmin Nam <youngmin.nam@samsung.com> > > This means you reviewed *every* patch. > Yes, I did. > > Tested-by: Youngmin Nam <youngmin.nam@samsung.com> > > Best regards, > Krzysztof >
© 2016 - 2026 Red Hat, Inc.