Re: [PATCH v6 00/19] Move PMC clocks into Tegra PMC driver

From: Sowjanya Komatineni
Date: Tue Jan 07 2020 - 19:02:58 EST



On 1/7/20 3:28 PM, Dmitry Osipenko wrote:
08.01.2020 02:24, Sowjanya Komatineni ÐÐÑÐÑ:
On 1/7/20 3:01 PM, Dmitry Osipenko wrote:
Hello Sowjanya,

07.01.2020 07:13, Sowjanya Komatineni ÐÐÑÐÑ:
This patch series moves Tegra PMC clocks from clock driver to pmc driver
along with the device trees changes and audio driver which uses one of
the pmc clock for audio mclk.

Tegra PMC has clk_out_1, clk_out_2, clk_out_3 and blink controls which
are currently registered by Tegra clock driver using clk_regiser_mux and
clk_register_gate which performs direct Tegra PMC register access.

When Tegra PMC is in secure mode, any access from non-secure world will
not go through.

This patch series adds these Tegra PMC clocks and blink controls to
Tegra
PMC driver with PMC as clock provider and removes them from Tegra clock
driver.

PMC clock clk_out_1 is dedicated for audio mclk from Tegra30 thru
Tegra210
and clock driver does inital parent configuration for it and enables
them.
But this clock should be taken care by audio driver as there is no need
to have this clock pre enabled.

So, this series also includes patch that updates ASoC driver to take
care of parent configuration for mclk if device tree don't specify
initial parent configuration using assigned-clock-parents and controls
audio mclk enable/disable during ASoC machine startup and shutdown.

DTs are also updated to use clk_out_1 as audio mclk rather than extern1.

This series also includes a patch for mclk fallback to extern1 when
retrieving mclk fails to have this backward compatible of new DT with
old kernels.

[v6]:ÂÂÂ Changes between v5 and v6 are
ÂÂÂÂ- v5 feedback
ÂÂÂÂ- Added ASoC machine startup and shutdown callbacks to control audio
ÂÂÂÂÂ mclk enable/disable and removed default mclk enable from clock
driver.
ÂÂÂÂ- Updated tegra_asoc_utils_set_rate to disable mclk only during PLLA
ÂÂÂÂÂ rate change and removed disabling PLLA as its already taken
care by
ÂÂÂÂÂ pll clock driver.
ÂÂÂÂ- Removed tegra_asoc_utils_set_rate call from utils_init as set_rate
ÂÂÂÂÂ is set during machine hw_params and during utils_init mclk is
ÂÂÂÂÂ already in disabled state and this causes warning during mclk
disable
ÂÂÂÂÂ in utils_set_rate.

[v5]:ÂÂÂ Changes between v4 and v5 are
ÂÂÂÂ- v4 feedback
ÂÂÂÂ- updated dt-binding pmc YAML schema with more description on power
ÂÂÂÂÂ gate nodes and pad configuration state nodes.
ÂÂÂÂ- update tegra_asoc_utils_set_rate to disable audio mclk only if
ÂÂÂÂÂ its in enable state.

[v4]:ÂÂÂ Changes between v3 and v4 are
ÂÂÂÂ- v3 Feedback
ÂÂÂÂ- Updated clocks clk_m_div2 and clk_m_div4 as osc_div2 and osc_div4.
ÂÂÂÂÂ Tegra don't have clk_m_div2, clk_m_div4 and they should actually
ÂÂÂÂÂ be osc_div2 and osc_div4 clocks from osc pads.
ÂÂÂÂ- Fixed PMC clock parents to use osc, osc_div2, osc_div4.
ÂÂÂÂ- Register each PMC clock as single clock rather than separate
ÂÂÂÂÂ mux and gate clocks.
ÂÂÂÂ- Update ASoC utils to use resource managed APIs rather than
ÂÂÂÂÂ using clk_get and clk_put.
ÂÂÂÂ- Updated device tree and ASoC driver to use clk_out_1 instead of
ÂÂÂÂÂ clk_out_1_mux as PMC clocks are registered as single clock.
ÂÂÂÂ- Update clock driver init_table to not enable audio related clocks
ÂÂÂÂÂ as ASoC utils will do audio clock enables.

[v3]:ÂÂÂ Changes between v2 and v3 are
ÂÂÂÂ- Removes set parent of clk_out_1_mux to extern1 and enabling
ÂÂÂÂÂ extern1 from the clock driver.
ÂÂÂÂ- Doesn't enable clk_out_1 and blink by default in pmc driver
ÂÂÂÂ- Updates ASoC driver to take care of audio mclk parent
ÂÂÂÂÂ configuration incase if device tree don't specify assigned
ÂÂÂÂÂ clock parent properties and enables mclk using both clk_out_1
ÂÂÂÂÂ and extern1.
ÂÂÂÂ- updates all device trees using extern1 as mclk in sound node
ÂÂÂÂÂ to use clk_out_1 from pmc.
ÂÂÂÂ- patch for YAML format pmc dt-binding
ÂÂÂÂ- Includes v2 feedback

[v2]:ÂÂÂ Changes between v1 and v2 are
ÂÂÂÂ- v2 includes patches for adding clk_out_1, clk_out_2, clk_out_3,
ÂÂÂÂÂ blink controls to Tegra PMC driver and removing clk-tegra-pmc.
ÂÂÂÂ- feedback related to pmc clocks in Tegra PMC driver from v1
ÂÂÂÂ- Removed patches for WB0 PLLM overrides and PLLE IDDQ PMC
programming
ÂÂÂÂÂ by the clock driver using helper functions from Tegra PMC.

ÂÂÂÂÂÂÂ Note:
ÂÂÂÂÂ To use helper functions from PMC driver, PMC early init need to
ÂÂÂÂÂ happen prior to using helper functions and these helper
functions are
ÂÂÂÂÂ for PLLM Override and PLLE IDDQ programming in PMC during
PLLM/PLLE
ÂÂÂÂÂ clock registration which happen in clock_init prior to Tegra PMC
ÂÂÂÂÂ probe.
ÂÂÂÂÂ Moving PLLM/PLLE clocks registration to happen after Tegra PMC
ÂÂÂÂÂ impacts other clocks EMC, MC and corresponding tegra_emc_init and
ÂÂÂÂÂ tegra_mc_init.
ÂÂÂÂÂ This implementation of configuring PMC registers thru helper
ÂÂÂÂÂ functions in clock driver needs proper changes across PMC, Clock,
ÂÂÂÂÂ EMC and MC inits to have it work across all Tegra platforms.

ÂÂÂÂÂ Currently PLLM Override is not enabled in the bootloader so proper
ÂÂÂÂÂ patches for this fix will be taken care separately.

[v1]:ÂÂÂ v1 includes patches for below fixes.
ÂÂÂÂ- adding clk_out_1, clk_out_2, clk_out_3, blink controls to Tegra
PMC
ÂÂÂÂÂ driver and removing clk-tegra-pmc.
ÂÂÂÂ- updated clock provider from tegra_car to pmc in the device tree
ÂÂÂÂÂ tegra210-smaug.dts that uses clk_out_2.
ÂÂÂÂ- Added helper functions in PMC driver for WB0 PLLM overrides and
PLLE
ÂÂÂÂÂ IDDQ programming to use by clock driver and updated clock
driver to
ÂÂÂÂÂ use these helper functions and removed direct PMC access from
clock
ÂÂÂÂÂ driver and all pmc base address references in clock driver.




Sowjanya Komatineni (19):
ÂÂ dt-bindings: clock: tegra: Change CLK_M_DIV to OSC_DIV clocks
ÂÂ clk: tegra: Change CLK_M_DIV clocks to OSC_DIV clocks
ÂÂ clk: tegra: Fix Tegra PMC clock out parents
ÂÂ dt-bindings: tegra: Convert Tegra PMC bindings to YAML
ÂÂ dt-bindings: soc: tegra-pmc: Add Tegra PMC clock bindings
ÂÂ soc: tegra: Add Tegra PMC clocks registration into PMC driver
ÂÂ dt-bindings: soc: tegra-pmc: Add id for Tegra PMC 32KHz blink clock
ÂÂ soc: tegra: Add support for 32KHz blink clock
ÂÂ clk: tegra: Remove tegra_pmc_clk_init along with clk ids
ÂÂ dt-bindings: clock: tegra: Remove pmc clock ids from clock
dt-bindings
ÂÂ ASoC: tegra: Use device managed resource APIs to get the clock
ÂÂ ASoC: tegra: Add audio mclk configuration
ÂÂ ASoC: tegra: Add fallback implementation for audio mclk
ÂÂ clk: tegra: Remove audio related clock enables from init_table
ÂÂ ARM: dts: tegra: Add clock-cells property to pmc
ÂÂ arm64: tegra: Add clock-cells property to Tegra PMC node
ÂÂ ARM: tegra: Update sound node clocks in device tree
ÂÂ arm64: tegra: smaug: Change clk_out_2 provider to pmc
ÂÂ ASoC: nau8825: change Tegra clk_out_2 provider from tegra_car to pmc

 .../bindings/arm/tegra/nvidia,tegra20-pmc.txt | 300
-----------------
 .../bindings/arm/tegra/nvidia,tegra20-pmc.yaml | 354
+++++++++++++++++++++
 .../devicetree/bindings/sound/nau8825.txt | 2 +-
 arch/arm/boot/dts/tegra114-dalmore.dts | 8 +-
 arch/arm/boot/dts/tegra114.dtsi | 4 +-
 arch/arm/boot/dts/tegra124-apalis-v1.2.dtsi | 8 +-
 arch/arm/boot/dts/tegra124-apalis.dtsi | 8 +-
 arch/arm/boot/dts/tegra124-jetson-tk1.dts | 8 +-
 arch/arm/boot/dts/tegra124-nyan.dtsi | 8 +-
 arch/arm/boot/dts/tegra124-venice2.dts | 8 +-
 arch/arm/boot/dts/tegra124.dtsi | 4 +-
 arch/arm/boot/dts/tegra20.dtsi | 4 +-
 arch/arm/boot/dts/tegra30-apalis-v1.1.dtsi | 8 +-
 arch/arm/boot/dts/tegra30-apalis.dtsi | 8 +-
 arch/arm/boot/dts/tegra30-beaver.dts | 8 +-
 arch/arm/boot/dts/tegra30-cardhu.dtsi | 8 +-
 arch/arm/boot/dts/tegra30-colibri.dtsi | 8 +-
 arch/arm/boot/dts/tegra30.dtsi | 4 +-
 arch/arm64/boot/dts/nvidia/tegra132.dtsi | 4 +-
 arch/arm64/boot/dts/nvidia/tegra210-smaug.dts | 2 +-
 arch/arm64/boot/dts/nvidia/tegra210.dtsi | 6 +-
 drivers/clk/tegra/Makefile | 1 -
 drivers/clk/tegra/clk-id.h | 11 +-
 drivers/clk/tegra/clk-tegra-fixed.c | 32 +-
 drivers/clk/tegra/clk-tegra-pmc.c | 122 -------
 drivers/clk/tegra/clk-tegra114.c | 41 +--
 drivers/clk/tegra/clk-tegra124.c | 46 +--
 drivers/clk/tegra/clk-tegra20.c | 9 +-
 drivers/clk/tegra/clk-tegra210.c | 30 +-
 drivers/clk/tegra/clk-tegra30.c | 31 +-
 drivers/clk/tegra/clk.h | 1 -
 drivers/soc/tegra/pmc.c | 352
++++++++++++++++++++
 include/dt-bindings/clock/tegra114-car.h | 18 +-
 include/dt-bindings/clock/tegra124-car-common.h | 18 +-
 include/dt-bindings/clock/tegra20-car.h | 2 +-
 include/dt-bindings/clock/tegra210-car.h | 18 +-
 include/dt-bindings/clock/tegra30-car.h | 18 +-
 include/dt-bindings/soc/tegra-pmc.h | 16 +
 sound/soc/tegra/tegra_alc5632.c | 28 +-
 sound/soc/tegra/tegra_asoc_utils.c | 125 ++++----
 sound/soc/tegra/tegra_asoc_utils.h | 3 +-
 sound/soc/tegra/tegra_max98090.c | 43 ++-
 sound/soc/tegra/tegra_rt5640.c | 43 ++-
 sound/soc/tegra/tegra_rt5677.c | 28 +-
 sound/soc/tegra/tegra_sgtl5000.c | 28 +-
 sound/soc/tegra/tegra_wm8753.c | 43 ++-
 sound/soc/tegra/tegra_wm8903.c | 43 ++-
 sound/soc/tegra/tegra_wm9712.c | 8 +-
 sound/soc/tegra/trimslice.c | 39 ++-
 49 files changed, 1192 insertions(+), 777 deletions(-)
 delete mode 100644
Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.txt
 create mode 100644
Documentation/devicetree/bindings/arm/tegra/nvidia,tegra20-pmc.yaml
 delete mode 100644 drivers/clk/tegra/clk-tegra-pmc.c
 create mode 100644 include/dt-bindings/soc/tegra-pmc.h

I briefly looked through the patches and tested them in all possible
configurations. For now everything looks and works well.

You could add this to all patches:

Tested-by: Dmitry Osipenko <digetx@xxxxxxxxx>
Reviewed-by: Dmitry Osipenko <digetx@xxxxxxxxx>
Thanks Dmitry
Actually, it will be more accurate if you will add my t-b only to the
T20/30 patches. I only looked through the T114+ patches without testing
them, thanks.

Most of patches has changes to t20 through t210.

Just to be clear, do you meant to add Tested-by to patches 6, 8, 11, 12, 13 and Reviewed-by tag to all patches?