lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251205011027.720512-1-willmcvicker@google.com>
Date: Fri,  5 Dec 2025 01:10:13 +0000
From: Will McVicker <willmcvicker@...gle.com>
To: Catalin Marinas <catalin.marinas@....com>, Will Deacon <will@...nel.org>, 
	Daniel Lezcano <daniel.lezcano@...aro.org>, Thomas Gleixner <tglx@...utronix.de>, 
	Krzysztof Kozlowski <krzk@...nel.org>, Alim Akhtar <alim.akhtar@...sung.com>
Cc: Will McVicker <willmcvicker@...gle.com>, Donghoon Yu <hoony.yu@...sung.com>, 
	Rob Herring <robh@...nel.org>, John Stultz <jstultz@...gle.com>, 
	Youngmin Nam <youngmin.nam@...sung.com>, Peter Griffin <peter.griffin@...aro.org>, 
	Tudor Ambarus <tudor.ambarus@...aro.org>, 
	"André Draszik" <andre.draszik@...aro.org>, Conor Dooley <conor+dt@...nel.org>, 
	Marek Szyprowski <m.szyprowski@...sung.com>, "Russell King (Oracle)" <linux@...linux.org.uk>, 
	linux-samsung-soc@...r.kernel.org, kernel-team@...roid.com, 
	linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: [PATCH v7 0/6] Add module support for Arm64 Exynos MCT driver

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.

To the driver changes (both as built-in and as module) on Pixel 6 Pro, I ran
these tests:

# cat /proc/interrupts | grep -E "mct|arch_timer"
 23:       6823      10938       7795       5607       8935      12828      21947       2200    GICv3  30 Level     arch_timer
104:          1          0          0          0          0          0          0          0    GICv3 785 Level     mct_comp_irq
105:        547          0          0          0          0          0          0          0    GICv3 789 Level     mct_tick0
106:          0       1333          0          0          0          0          0          0    GICv3 790 Level     mct_tick1
107:          0          0       1467          0          0          0          0          0    GICv3 791 Level     mct_tick2
108:          0          0          0        583          0          0          0          0    GICv3 792 Level     mct_tick3
109:          0          0          0          0        206          0          0          0    GICv3 793 Level     mct_tick4
110:          0          0          0          0          0        153          0          0    GICv3 794 Level     mct_tick5
111:          0          0          0          0          0          0         13          0    GICv3 795 Level     mct_tick6
112:          0          0          0          0          0          0          0         87    GICv3 796 Level     mct_tick7

# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
arch_sys_counter

When built and loaded as a module, you can verify via:

# lsmod | grep exynos_mct
exynos_mct             20480  9

I also compile tested for ARCH=ARM DEFCONFIG=multi_v7_defconfig with the
following debug configs to ensure the section mismatches are fixed:
  CONFIG_DEBUG_SECTION_MISMATCH=y
  # CONFIG_SECTION_MISMATCH_WARN_ONLY is not set

Any additional testing is much appreciated!

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 bca42080637c (Merge
branch 'next/drivers-late' into for-next).

[1] https://android.googlesource.com/kernel/gs/+log/refs/heads/android-gs-raviole-5.10-android12-d1
[2] https://gitlab.com/LinaroLtd/googlelt/pixelscripts/-/blob/clo/main/README.md?ref_type=heads

Cc: Alim Akhtar <alim.akhtar@...sung.com>
Cc: Daniel Lezcano <daniel.lezcano@...aro.org>
Cc: Donghoon Yu <hoony.yu@...sung.com>
Cc: Rob Herring <robh@...nel.org>
Cc: John Stultz <jstultz@...gle.com>
Cc: Thomas Gleixner <tglx@...utronix.de>
Cc: Youngmin Nam <youngmin.nam@...sung.com>
Cc: Peter Griffin <peter.griffin@...aro.org>
Cc: Tudor Ambarus <tudor.ambarus@...aro.org>
Cc: André Draszik <andre.draszik@...aro.org>
Cc: Will Deacon <will@...nel.org>
Cc: Conor Dooley <conor+dt@...nel.org>
Cc: Krzysztof Kozlowski <krzk@...nel.org>
Cc: Marek Szyprowski <m.szyprowski@...sung.com>
Cc: "Russell King (Oracle)" <linux@...linux.org.uk>
Cc: linux-samsung-soc@...r.kernel.org
Cc: kernel-team@...roid.com
Cc: linux-arm-kernel@...ts.infradead.org
Cc: linux-kernel@...r.kernel.org
---

Changes in v7:
- Dropped v6 patch 1/6 that removed __init from register_current_timer_delay()
- Refactored the init function in patch 4/7 to handle the case of registering
  the timer delay function for ARM 32-bit systems from an __init tagged function.
  This addresses the original section mismatch issues reported in v4.
- Rebased series onto base commit bca42080637c (Merge branch
  'next/drivers-late' into for-next).

Changes in v6:
- Updated module support to only register the MCT driver as a platform driver
  for ARM64 to ensure ARM 32-bit SoCs continue to probe the MCT driver very
  early.
- Squashed the percpu fix suggested by Marek Szyprowski in
  https://lore.kernel.org/all/20250827102645.1964659-1-m.szyprowski@samsung.com/
  together with patch 3/6.

Changes in v5:
- Fixed section mismatch issues.
- Addressed Arnd's concerns regarding potential issues with unloading and/or
  unbinding the driver.
- Fixed SoB concerns to clarify the development chain from AOSP to Linux.
- Pulled in https://lore.kernel.org/all/20250827102645.1964659-1-m.szyprowski@samsung.com/
  to limit percpu interrupts only for ARM64.

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: Don't register as a sched_clock on
    arm64

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

Will McVicker (4):
  clocksource/drivers/exynos_mct: Fix uninitialized irq name warning
  clocksource/drivers/exynos_mct: Refactor driver init
  clocksource/drivers/exynos_mct: Add module support for ARM64
  arm64: exynos: Drop select CLKSRC_EXYNOS_MCT

 arch/arm64/Kconfig.platforms     |   1 -
 drivers/clocksource/Kconfig      |   3 +-
 drivers/clocksource/exynos_mct.c | 255 ++++++++++++++++++++++---------
 3 files changed, 182 insertions(+), 77 deletions(-)


base-commit: bca42080637ce3a21092fc0f7d5411e853b0c3b3
-- 
2.52.0.223.gf5cc29aaa4-goog


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ