This adds devfreq support for imx8mm, covering dynamic scaling of internal NOC and DDR Controller Scaling for simple busses (NIC/NOC) is done through the clk framework while DRAM scaling is performed in firmware with an "imx-ddrc" wrapper for devfreq. Changes since v1: * bindings: Stop using "contains" for "compatible" * bindings: Set "additionalProperties: false" and document missing stuff. * Remove (c) from NXP copyright notice * Fix various checkpatch issues * Remove unused dram_alt_root clk from imx-ddrc Link to v1: https://patchwork.kernel.org/project/linux-arm-kernel/list/?series=158773 Changes since RFC v3: * Implement passive support and set NOC's parent to DDRC * Drop scaling AHB/AXI for now (NOC/DDRC use most power anyway) * Stop relying on clk_min_rate * Split into two devreq drivers (and bindings) because the ddrc is really a distinct piece of hardware. * Perform DRAM frequency inside devfreq instead of clk, mostly due to objections to earlier RFCs for imx8m-dram-clk. * Fetch info about dram clk parents from firmware instead of hardcoding in driver. This can more easily support additional rates. * Link: https://patchwork.kernel.org/cover/11056779/ * Link: https://patchwork.kernel.org/patch/11049429/ Scaling buses can cause problems for devices with realtime bandwith requirements such as display, the intention is to use the interconnect framework to make DEV_PM_QOS_MIN_FREQUENCY to devfreq. There are separate patches for that: * https://patchwork.kernel.org/cover/11104055/ * https://patchwork.kernel.org/cover/11078671/ Leonard Crestez (7): clk: imx8m: Set CLK_GET_RATE_NOCACHE on dram_alt/apb dt-bindings: devfreq: Add bindings for generic imx buses PM / devfreq: Add generic imx bus driver dt-bindings: devfreq: Add bindings for imx ddr controller PM / devfreq: Add dynamic scaling for imx ddr controller PM / devfreq: imx-ddrc: Measure bandwidth with perf arm64: dts: imx8mm: Add devfreq nodes .../devicetree/bindings/devfreq/imx-ddrc.yaml | 60 ++ .../devicetree/bindings/devfreq/imx.yaml | 68 +++ arch/arm64/boot/dts/freescale/imx8mm.dtsi | 53 +- drivers/clk/imx/clk-imx8mm.c | 6 +- drivers/clk/imx/clk-imx8mn.c | 6 +- drivers/clk/imx/clk-imx8mq.c | 7 +- drivers/devfreq/Kconfig | 12 + drivers/devfreq/Makefile | 1 + drivers/devfreq/imx-ddrc.c | 514 ++++++++++++++++++ drivers/devfreq/imx-devfreq.c | 148 +++++ 10 files changed, 867 insertions(+), 8 deletions(-) create mode 100644 Documentation/devicetree/bindings/devfreq/imx-ddrc.yaml create mode 100644 Documentation/devicetree/bindings/devfreq/imx.yaml create mode 100644 drivers/devfreq/imx-ddrc.c create mode 100644 drivers/devfreq/imx-devfreq.c -- 2.17.1