Re: [PATCH v7 00/37] NVIDIA Tegra power management patches for 5.15

Ulf Hansson
2021-07-09T13:02:25Z

On Fri, 2 Jul 2021 at 01:28, Dmitry Osipenko <digetx@gmail.com> wrote:
>
> Hello,
>
> This series continues the work on enabling voltage scaling of the core
> power domain for NVIDIA Tegra SoCs. All the previous grounding work around
> improving OPP API and adding the initial core power domain driver is now
> landing into 5.14 kernel and already available in linux-next.
>
> The biggest challenge left so far is the power management of the PLLs
> and system clocks which don't have a dedicated hardware unit. I made a lot
> of changes around it by going back to a variant where individual device
> drivers are responsible for the power management in oppose to a recent
> variant where the most of power management was done by the clk controller
> driver. This allowed to drop the need of having a special lockdep
> annotation for the power domain's mutex, which Ulf Hansson didn't like
> previously. We don't have situations of a nested GENPD accesses anymore.
> It also allowed to minimize the clk patch a lot. Now clk driver manages
> power of the internal clocks only.
>
> This series enables a full power management for Tegra20 and Tegra30 SoCs.
> It doesn't include all the device-tree binding patches. I'll try to split
> this series into a smaller parts that could be applied individually. For
> now I want to get a feedback at least on the first six patches.
>
> Example /sys/kernel/debug/pm_genpd/pm_genpd_summary from Tegra20 Acer A500:
>
> domain status children performance
> /device runtime status
> ----------------------------------------------------------------------------------------------
> mpe off-0 0
> /devices/soc0/50000000.host1x/54040000.mpe suspended 0
> vdec off-0 0
> /devices/soc0/6001a000.vde suspended 0
> venc off-0 0
> /devices/soc0/50000000.host1x/54080000.vi suspended 0
> /devices/soc0/50000000.host1x/54100000.isp suspended 0
> 3d off-0 0
> /devices/soc0/50000000.host1x/54180000.gr3d suspended 0
> core-domain on 1100000
> 3d, venc, vdec, mpe
> /devices/soc0/50000000.host1x active 1100000
> /devices/soc0/50000000.host1x/540c0000.epp suspended 0
> /devices/soc0/50000000.host1x/54140000.gr2d suspended 0
> /devices/soc0/50000000.host1x/54280000.hdmi suspended 0
> /devices/soc0/c5000000.usb active 1100000
> /devices/soc0/c5008000.usb active 1100000
> /devices/soc0/c8000000.mmc active 1000000
> /devices/soc0/c8000400.mmc active 1000000
> /devices/soc0/c8000600.mmc active 1000000
> /devices/soc0/7000f400.memory-controller active 1000000
> /devices/platform/tegra_clk_sclk active 950000
> /devices/soc0/50000000.host1x/54200000.dc active 950000
> /devices/soc0/50000000.host1x/54240000.dc suspended 0
>
>
> Example /sys/kernel/debug/pm_genpd/pm_genpd_summary from Tegra30 Nexus 7:
>
> domain status children performance
> /device runtime status
> ----------------------------------------------------------------------------------------------
> heg on 1000000
> /devices/soc0/50000000.host1x active 1000000
> /devices/soc0/50000000.host1x/540c0000.epp suspended 0
> /devices/soc0/50000000.host1x/54140000.gr2d suspended 0
> mpe off-0 0
> /devices/soc0/50000000.host1x/54040000.mpe suspended 0
> vdec off-0 0
> /devices/soc0/6001a000.vde suspended 0
> venc off-0 0
> /devices/soc0/50000000.host1x/54080000.vi suspended 0
> /devices/soc0/50000000.host1x/54100000.isp suspended 0
> 3d1 off-0 0
> /devices/genpd:1:54180000.gr3d suspended 0
> 3d0 off-0 0
> /devices/genpd:0:54180000.gr3d suspended 0
> core-domain on 1000000
> 3d0, 3d1, venc, vdec, mpe, heg
> /devices/soc0/7d000000.usb active 1000000
> /devices/soc0/78000400.mmc active 950000
> /devices/soc0/7000f400.memory-controller active 1000000
> /devices/soc0/7000a000.pwm active 1000000
> /devices/platform/tegra_clk_pll_c active 1000000
> /devices/platform/tegra_clk_pll_e suspended 0
> /devices/platform/tegra_clk_pll_m active 1000000
> /devices/platform/tegra_clk_sclk active 1000000
> /devices/soc0/7000f800.fuse suspended 0
> /devices/soc0/50000000.host1x/54240000.dc suspended 0
> /devices/soc0/50000000.host1x/54200000.dc active 1000000
>
> Dmitry Osipenko (37):
> soc/tegra: pmc: Temporarily disable PMC state syncing
> soc/tegra: pmc: Implement attach_dev() of power domain drivers
> soc/tegra: Don't print error message when OPPs not available
> soc/tegra: Add devm_tegra_core_dev_init_opp_table_simple()
> dt-bindings: clock: tegra-car: Document new tegra-clocks node
> clk: tegra: Support runtime PM and power domain
> dt-bindings: host1x: Document OPP and power domain properties
> dt-bindings: host1x: Document Memory Client resets of Host1x, GR2D and
> GR3D
> gpu: host1x: Add host1x_channel_stop()
> gpu: host1x: Add runtime PM support
> gpu: host1x: Add stub driver for MPE, VI, EPP and ISP
> drm/tegra: dc: Support OPP and SoC core voltage scaling
> drm/tegra: hdmi: Add OPP support
> drm/tegra: gr2d: Support OPP and power management
> drm/tegra: gr3d: Support OPP and power management
> drm/tegra: vic: Stop channel before suspending
> usb: chipidea: tegra: Add runtime PM support
> bus: tegra-gmi: Add runtime PM support
> pwm: tegra: Add runtime PM and OPP support
> mmc: sdhci-tegra: Add runtime PM and OPP support
> mtd: rawnand: tegra: Add runtime PM support
> soc/tegra: fuse: Clear fuse->clk on driver probe failure
> soc/tegra: fuse: Add runtime PM support
> soc/tegra: fuse: Enable fuse clock on suspend
> clk: tegra: Remove CLK_IS_CRITICAL flag from fuse clock
> spi: tegra20-slink: Improve runtime PM usage
> spi: tegra20-slink: Add OPP support
> memory: tegra20-emc: Add minimal runtime PM support
> memory: tegra30-emc: Add minimal runtime PM support
> media: dt: bindings: tegra-vde: Convert to schema
> media: dt: bindings: tegra-vde: Document OPP and power domain
> media: staging: tegra-vde: Support generic power domain
> ARM: tegra: Add OPP tables and power domains to Tegra20 device-trees
> ARM: tegra: Add OPP tables and power domains to Tegra30 device-trees
> ARM: tegra: Add Memory Client resets to Tegra20 GR2D, GR3D and Host1x
> ARM: tegra: Add Memory Client resets to Tegra30 GR2D, GR3D and Host1x
> soc/tegra: pmc: Enable core domain support on Tegra20 and Tegra30
>
> .../bindings/clock/nvidia,tegra20-car.yaml | 51 +
> .../display/tegra/nvidia,tegra20-host1x.txt | 53 +
> .../bindings/media/nvidia,tegra-vde.txt | 64 -
> .../bindings/media/nvidia,tegra-vde.yaml | 119 ++
> .../boot/dts/tegra20-acer-a500-picasso.dts | 1 +
> arch/arm/boot/dts/tegra20-colibri.dtsi | 3 +-
> arch/arm/boot/dts/tegra20-harmony.dts | 3 +-
> arch/arm/boot/dts/tegra20-paz00.dts | 1 +
> .../arm/boot/dts/tegra20-peripherals-opp.dtsi | 941 +++++++++++
> arch/arm/boot/dts/tegra20-seaboard.dts | 3 +-
> arch/arm/boot/dts/tegra20-tamonten.dtsi | 3 +-
> arch/arm/boot/dts/tegra20-trimslice.dts | 9 +
> arch/arm/boot/dts/tegra20-ventana.dts | 1 +
> arch/arm/boot/dts/tegra20.dtsi | 115 +-
> .../tegra30-asus-nexus7-grouper-common.dtsi | 1 +
> arch/arm/boot/dts/tegra30-beaver.dts | 1 +
> arch/arm/boot/dts/tegra30-cardhu.dtsi | 1 +
> arch/arm/boot/dts/tegra30-colibri.dtsi | 17 +-
> arch/arm/boot/dts/tegra30-ouya.dts | 1 +
> .../arm/boot/dts/tegra30-peripherals-opp.dtsi | 1412 +++++++++++++++++
> arch/arm/boot/dts/tegra30.dtsi | 170 +-
> drivers/bus/tegra-gmi.c | 44 +-
> drivers/clk/tegra/Makefile | 1 +
> drivers/clk/tegra/clk-device.c | 222 +++
> drivers/clk/tegra/clk-pll.c | 2 +-
> drivers/clk/tegra/clk-super.c | 2 +-
> drivers/clk/tegra/clk-tegra-periph.c | 6 +-
> drivers/clk/tegra/clk-tegra20.c | 39 +-
> drivers/clk/tegra/clk-tegra30.c | 70 +-
> drivers/clk/tegra/clk.c | 66 +
> drivers/clk/tegra/clk.h | 2 +
> drivers/gpu/drm/tegra/dc.c | 69 +
> drivers/gpu/drm/tegra/dc.h | 2 +
> drivers/gpu/drm/tegra/gr2d.c | 156 +-
> drivers/gpu/drm/tegra/gr3d.c | 401 ++++-
> drivers/gpu/drm/tegra/hdmi.c | 9 +-
> drivers/gpu/drm/tegra/vic.c | 15 +
> drivers/gpu/host1x/channel.c | 8 +
> drivers/gpu/host1x/debug.c | 15 +
> drivers/gpu/host1x/dev.c | 184 ++-
> drivers/gpu/host1x/dev.h | 3 +-
> drivers/gpu/host1x/hw/channel_hw.c | 44 +-
> drivers/gpu/host1x/intr.c | 3 -
> drivers/gpu/host1x/syncpt.c | 5 +-
> drivers/memory/tegra/tegra20-emc.c | 31 +
> drivers/memory/tegra/tegra30-emc.c | 31 +
> drivers/mmc/host/sdhci-tegra.c | 81 +-
> drivers/mtd/nand/raw/tegra_nand.c | 44 +-
> drivers/pwm/pwm-tegra.c | 104 +-
> drivers/soc/tegra/common.c | 4 +-
> drivers/soc/tegra/fuse/fuse-tegra.c | 62 +
> drivers/soc/tegra/fuse/fuse-tegra20.c | 10 +-
> drivers/soc/tegra/fuse/fuse-tegra30.c | 10 +-
> drivers/soc/tegra/fuse/fuse.h | 2 +
> drivers/soc/tegra/pmc.c | 164 ++
> drivers/spi/spi-tegra20-slink.c | 76 +-
> drivers/staging/media/tegra-vde/vde.c | 59 +-
> drivers/usb/chipidea/ci_hdrc_tegra.c | 50 +-
> include/linux/host1x.h | 1 +
> include/soc/tegra/common.h | 13 +
> 60 files changed, 4710 insertions(+), 370 deletions(-)
> delete mode 100644 Documentation/devicetree/bindings/media/nvidia,tegra-vde.txt
> create mode 100644 Documentation/devicetree/bindings/media/nvidia,tegra-vde.yaml
> create mode 100644 drivers/clk/tegra/clk-device.c
>

Dmitry, I am happy to help to review this, but unfortunately(?) I am
moving into holiday mode for a couple of weeks, very soon. I will do
my best to move forward with the review, but please be patient.

Kind regards
Uffe