Message ID | 20250402233407.2452429-1-willmcvicker@google.com (mailing list archive) |
---|---|
Headers | show |
Series | Add module support for Arm64 Exynos MCT driver | expand |
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 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 >
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