19.12.2019 00:04, Dmitry Osipenko пишет: > Hello, > > This series does the following: > > 1. Unifies Tegra20/30/114 drivers into a single driver and moves it out > into common drivers/cpuidle/ directory. > > 2. Preapres code for CPU cluster power-down idling state enabling on > Tegra30. > > In the end there is a quite nice clean up of the Tegra CPUIDLE drivers > and of the Tegra's arch code in general. Please review, thanks! > > WARNING!!! This series in made on top of CPUFreq patches [1]. The CPUFreq > patches should be applied first, otherwise there will be a minor merge > conflict in 'arch/arm/mach-tegra/tegra.c' because CPUFreq patches add a > new simple-platform device for Tegra30 [2]. > > [1] https://patchwork.ozlabs.org/project/linux-tegra/list/?series=149451 > [2] https://patchwork.ozlabs.org/patch/1212772/ > > Changelog: > > v9: - Rebased on recent linux-next. Dropped the v8 "Avoid NULL dereference.." > patch as a result, it's not needed anymore. > > - Temporarily dropped "cpuidle: tegra: Support CPU cluster power-down > state on Tegra30" patch because Michał Mirosław reported that it causes > problem for ASUS TF300T Tegra30 device, we'll have to resolve the > problem first. > > - Added ACKs from Peter De Schrijver to the patches. > > v8: - Rebased on recent linux-next, now making use of > cpuidle_driver_state_disabled(). Added new patch to make this new API > usable by the updated Tegra cpuidle driver: > > cpuidle: Avoid NULL dereference in cpuidle_driver_state_disabled() > > - Added new patch to handle case where LP2 isn't available: > > cpuidle: tegra: Disable CC6 state if LP2 unavailable > > v7: - drivers/cpuidle/cpuidle-tegra.c now includes an explicit comment that > clarifies the new terminology that is used for naming of the idling > states. This change was suggested by Peter De Schrijver in the review > comment to v6. See the comment to struct tegra_idle_driver in the code. > > - (!) This series is now based on top of the "NVIDIA Tegra20 CPUFreq > driver major update" patchset. The conflict between these two series > is trivial to resolve, but still it's worth to mention about that. > > v6: - Addressed request from Thierry Reding to change the way patches are > organized by making changes in a more incremental manner. > > - tegra_sleep_cpu() now checks for the secondary CPUs to be offline > in the "Make outer_disable() open-coded" patch. > > v5: - Rebased on a recent linux-next, fixed one minor conflict in Kconfig. > > - Improved commit's message of the "Support CPU cluster power-down state > on Tegra30" patch. > > - The "Support CPU cluster power-down state on Tegra30" patch is also > got split and now there is additional "Make outer_disable() open-coded" > patch. > > - Made minor cosmetic changes to the "Introduce unified driver for > NVIDIA Tegra SoCs" patch by improving error message and renaming > one variable. > > v4: - Fixed compilation with !CONFIG_CACHE_L2X0 (and tested that it still > works). > > - Replaced ktime_compare() with ktime_before() in the new driver, > for consistency. > > v3: - Addressed review comments that were made by Jon Hunter to v2 by > splitting patches into smaller (and simpler) chunks, better > documenting changes in the commit messages and using proper error > codes in the code. > > Warnings are replaced with a useful error messages in the code of > "Introduce unified driver for NVIDIA Tegra SoCs" patch. > > Secondary CPUs parking timeout increased to 100ms because I found > that it actually may happen to take more than 1ms if CPU is running > on a *very* low frequency. > > Added diagnostic messages that are reporting Flow Controller state > when CPU parking fails. > > Further polished cpuidle driver's code. > > The coupled state entering is now aborted if there is a pending SGI > (Software Generated Interrupt) because it will be lost after GIC's > power-cycling. Like it was done by the old Tegra20 CPUIDLE driver. > > v2: - Added patches to enable the new cpuidle driver in the defconfigs: > > ARM: multi_v7_defconfig: Enable Tegra cpuidle driver > ARM: tegra: Enable Tegra cpuidle driver in tegra_defconfig > > - Dropped patches that removed CPUIDLE_FLAG_TIMER_STOP from the idling > states because that flag actually doesn't have any negative effects, > but still is correct for the case of a local CPU timer on older Tegra > SoCs: > > cpuidle: tegra: Remove CPUIDLE_FLAG_TIMER_STOP from Tegra114/124 idle-state > cpuidle: tegra: Remove CPUIDLE_FLAG_TIMER_STOP from all states > > - The "Add unified driver for NVIDIA Tegra SoCs" patch got more polish. > Tegra30 and Terga114 states are now squashed into a single common C7 > state (following Parker TRM terminology, see 17.2.2.2 Power Management > States), more comments added, etc minor changes. > > Dmitry Osipenko (17): > ARM: tegra: Compile sleep-tegra20/30.S unconditionally > ARM: tegra: Add tegra_pm_park_secondary_cpu() > ARM: tegra: Remove pen-locking from cpuidle-tegra20 > ARM: tegra: Change tegra_set_cpu_in_lp2() type to void > ARM: tegra: Propagate error from tegra_idle_lp2_last() > ARM: tegra: Expose PM functions required for new cpuidle driver > ARM: tegra: Rename some of the newly exposed PM functions > ARM: tegra: Make outer_disable() open-coded > arm: tegra20: cpuidle: Handle case where secondary CPU hangs on > entering LP2 > arm: tegra20: cpuidle: Make abort_flag atomic > arm: tegra20/30: cpuidle: Remove unnecessary memory barrier > cpuidle: Refactor and move out NVIDIA Tegra20 driver into > drivers/cpuidle > cpuidle: tegra: Squash Tegra30 driver into the common driver > cpuidle: tegra: Squash Tegra114 driver into the common driver > cpuidle: tegra: Disable CC6 state if LP2 unavailable > ARM: multi_v7_defconfig: Enable Tegra cpuidle driver > ARM: tegra: Enable Tegra cpuidle driver in tegra_defconfig > > arch/arm/configs/multi_v7_defconfig | 1 + > arch/arm/configs/tegra_defconfig | 1 + > arch/arm/mach-tegra/Makefile | 19 +- > arch/arm/mach-tegra/cpuidle-tegra114.c | 89 ---- > arch/arm/mach-tegra/cpuidle-tegra20.c | 212 ---------- > arch/arm/mach-tegra/cpuidle-tegra30.c | 132 ------ > arch/arm/mach-tegra/cpuidle.c | 50 --- > arch/arm/mach-tegra/cpuidle.h | 21 - > arch/arm/mach-tegra/irq.c | 3 +- > arch/arm/mach-tegra/pm.c | 54 ++- > arch/arm/mach-tegra/pm.h | 4 - > arch/arm/mach-tegra/reset-handler.S | 11 - > arch/arm/mach-tegra/reset.h | 9 +- > arch/arm/mach-tegra/sleep-tegra20.S | 170 -------- > arch/arm/mach-tegra/sleep-tegra30.S | 6 +- > arch/arm/mach-tegra/sleep.h | 15 - > arch/arm/mach-tegra/tegra.c | 7 +- > drivers/cpuidle/Kconfig.arm | 8 + > drivers/cpuidle/Makefile | 1 + > drivers/cpuidle/cpuidle-tegra.c | 389 ++++++++++++++++++ > include/soc/tegra/cpuidle.h | 2 +- > .../mach-tegra => include/soc/tegra}/irq.h | 8 +- > include/soc/tegra/pm.h | 31 ++ > 23 files changed, 482 insertions(+), 761 deletions(-) > delete mode 100644 arch/arm/mach-tegra/cpuidle-tegra114.c > delete mode 100644 arch/arm/mach-tegra/cpuidle-tegra20.c > delete mode 100644 arch/arm/mach-tegra/cpuidle-tegra30.c > delete mode 100644 arch/arm/mach-tegra/cpuidle.c > delete mode 100644 arch/arm/mach-tegra/cpuidle.h > create mode 100644 drivers/cpuidle/cpuidle-tegra.c > rename {arch/arm/mach-tegra => include/soc/tegra}/irq.h (59%) > Hello Rafael and Daniel, Could you please take a look at the CPUIDLE driver patches and ACK them if they are okay to you? Then Thierry will be able to take this series via Tegra tree. Thanks in advance!