Re: [PATCH v2 0/7] Add module support for Arm64 Exynos MCT driver

Youngmin Nam
2025-04-04T01:09:16Z

[-- Attachment #1: Type: text/plain, Size: 5348 bytes --]

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

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]