Re: [PATCH v10 00/15] memory: tegra: Introduce Tegra30 EMC driver

From: Thierry Reding
Date: Tue Oct 29 2019 - 09:52:03 EST


On Mon, Aug 12, 2019 at 12:00:28AM +0300, Dmitry Osipenko wrote:
> Hello,
>
> This series introduces driver for the External Memory Controller (EMC)
> found on Tegra30 chips, it controls the external DRAM on the board. The
> purpose of this driver is to program memory timing for external memory on
> the EMC clock rate change. The driver was tested using the ACTMON devfreq
> driver that performs memory frequency scaling based on memory-usage load.
>
> Changelog:
>
> v10: - Addressed review comments that were made by Rob Herring to v9 by
> dropping unnecessary reg descriptions, specifying valid ranges and
> using boolean type where appropriate in the device-tree patches.
>
> v9: - Fixed memory corruption bug that was uncovered after introducing
> some extra optimizations to the devfreq driver that allows CPU
> to stay longer in the LP2 cpuidle state. The corruption is caused by
> a very late AUTO-REFRESH re-enabling due to a possible schedule on
> waiting for clk-change completion, the re-enabling is now a part of
> "EMC exec-after-clkchange" hardware sequence.
>
> - Added "type: object" to T124 MC YAML, that was missed in v8 by accident.
>
> v8: - Added two new patches:
>
> memory: tegra20-emc: Increase handshake timeout
> memory: tegra20-emc: wait_for_completion_timeout() doesn't return error
>
> Turned out that memory-clk handshake may take much more time under
> some circumstances. The second patch is a minor cleanup. The same
> changes are also applied to the Terga30 EMC driver addition-patch.
>
> The pattern-properties of YAML bindings gained "type: object", for
> consistency.
>
> v7: - Addressed review comments that were made by Rob Herring to v6 by
> removing old Terga30 Memory Controller binding once it's converted
> to YAML, by using explicit patterns for the sub-nodes and specifying
> min/max clock rates in the YAML.
>
> - Two patches that were added in v6 are removed from the series:
>
> clk: tegra20: emc: Add tegra20_clk_emc_on_pllp()
> ARM: tegra30: cpuidle: Don't enter LP2 on CPU0 when EMC runs off PLLP
>
> Because the problem with the PLLP is resolved now, turned out it was
> a bug in the CPU-suspend code.
>
> - The "Introduce Tegra30 EMC driver" patch got a fix for the "Same Freq"
> bit typo, it's a bit 27 and not 16.
>
> v6: - Tegra124 Memory Controller binding factored out into standalone
> binding because it requires to specify MC_EMEM_ARB_MISC1 for EMEM
> programming, which is not required for Tegra30. This makes the
> upstream MC registers specification to match downstream exactly,
> easing porting of boards memory timings configuration to upstream.
>
> - Tegra30/124 Memory Controller binding converted to YAML.
>
> - Tegra30 External Memory Controller binding now is in YAML format.
>
> - Added workaround for hanging during LP2 when EMC runs off PLLP on
> Tegra30 in this new patches:
>
> clk: tegra20: emc: Add tegra20_clk_emc_on_pllp()
> ARM: tegra30: cpuidle: Don't enter LP2 on CPU0 when EMC runs off PLLP
>
> - Added info message to the Tegra20/30 EMC drivers, telling about
> RAM code and a number of available timings:
>
> memory: tegra20-emc: Print a brief info message about the timings
>
> v5: - Addressed review comments that were made by Thierry Reding to v4 by
> adding appropriate copyrights to the source code headers and making
> Tegra30 EMC driver to use common Tegra20 CLK API directly instead
> of having a dummy-proxy functions specifically for Tegra30.
>
> - Addressed review comments that were made by Stephen Boyd to v4 by
> rewording commit message of the "Add custom EMC clock implementation"
> patch and adding clarifying comment (to that patch as well) which
> tells why EMC is a critical clock.
>
> - Added suspend-resume to Tegra30 EMC driver to error out if EMC driver
> is in a "bad state" as it will likely cause a hang on entering suspend.
>
> - Dropped patch "tegra20-emc: Replace clk_get_sys with devm_clk_get"
> because the replaced clocks are actually should be removed altogether
> in the "Drop setting EMC rate to max on probe" patch and that was
> missed by an accident.
>
> - Added "tegra20-emc: Pre-configure debug register" patch which ensures
> that inappropriate HW debug features are disabled at a probe time.
> The same change is also made in the "Introduce Tegra30 EMC driver"
> patch.
>
> - Added ACKs to the patches from Peter De Schrijver that he gave to v4
> since all of the v5 changes are actually very minor.
>
> v4: - Addressed review comments that were made by Peter De Schrijver to v3
> by adding fence_udelay() after writes in the "Add custom EMC clock
> implementation" patch.
>
> - Added two new minor patches:
>
> memory: tegra: Ensure timing control debug features are disabled
> memory: tegra: Consolidate registers definition into one place
>
> The first one is needed to ensure that EMC driver will work
> properly regardless of hardware configuration left after boot.
> The second patch is just a minor code cleanup.
>
> - The "Introduce Tegra30 EMC driver" got also few very minor changes.
> Now every possible error case is handled, nothing is ignored.
> The EMC_DBG register is explicitly initialized during probe to be
> on the safe side.
>
> v3: - Addressed review comments that were made by Stephen Boyd to v2 by
> adding explicit typing for the callback variable, by including
> "clk-provider.h" directly in the code and by dropping __clk_lookup
> usage where possible.
>
> - Added more patches into this series:
>
> memory: tegra20-emc: Drop setting EMC rate to max on probe
> memory: tegra20-emc: Adapt for clock driver changes
> memory: tegra20-emc: Include io.h instead of iopoll.h
> memory: tegra20-emc: Replace clk_get_sys with devm_clk_get
>
> Initially I was going to include these patches into other patchset,
> but changed my mind after rearranging things a tad. The "Adapt for
> clock driver changes" patch is directly related to the clock changes
> done in the first patch of this series, the rest are minor cleanups
> that are fine to include here as well.
>
> - Added some more words to the commit message of "Add binding for NVIDIA
> Tegra30 External Memory Controller" patch, clarifying why common DDR
> timing device-tree form isn't suitable for Tegra30.
>
> - The Tegra30 EMC driver now explicitly selects the registers access
> mode (EMC_DBG mux), not relying on the setting left from bootloader.
>
> v2: - Added support for changing MC clock diver configuration based on
> Memory Controller (MC) configuration which is part of the memory
> timing.
>
> - Merged the "Add custom EMC clock implementation" patch into this
> series because the "Introduce Tegra30 EMC driver" patch directly
> depends on it. Please note that Tegra20 EMC driver will need to be
> adapted for the clock changes as well, I'll send out the Tegra20
> patches after this series will be applied because of some other
> dependencies (devfreq) and because the temporary breakage won't
> be critical (driver will just error out on probe).
>
> - EMC driver now performs MC configuration validation by checking
> that the number of MC / EMC timings matches and that the timings
> rate is the same.
>
> - EMC driver now supports timings that want to change the MC clock
> configuration.
>
> - Other minor prettifying changes of the code.
>
> Dmitry Osipenko (15):
> clk: tegra20/30: Add custom EMC clock implementation
> memory: tegra20-emc: Drop setting EMC rate to max on probe
> memory: tegra20-emc: Adapt for clock driver changes
> memory: tegra20-emc: Include io.h instead of iopoll.h
> memory: tegra20-emc: Pre-configure debug register
> memory: tegra20-emc: Print a brief info message about the timings
> memory: tegra20-emc: Increase handshake timeout
> memory: tegra20-emc: wait_for_completion_timeout() doesn't return
> error
> dt-bindings: memory: tegra30: Convert to Tegra124 YAML
> dt-bindings: memory: Add binding for NVIDIA Tegra30 Memory Controller
> dt-bindings: memory: Add binding for NVIDIA Tegra30 External Memory
> Controller
> memory: tegra: Introduce Tegra30 EMC driver
> memory: tegra: Ensure timing control debug features are disabled
> memory: tegra: Consolidate registers definition into common header
> ARM: dts: tegra30: Add External Memory Controller node

Applied these to for-5.5/clk, for-5.5/dt-bindings, for-5.5/memory and
for-5.5/arm/dt, thanks.

Thierry

Attachment: signature.asc
Description: PGP signature