PM / devfreq: Add dynamic scaling for imx8m ddr controller
authorLeonard Crestez <leonard.crestez@nxp.com>
Fri, 22 Nov 2019 21:45:03 +0000 (23:45 +0200)
committerChanwoo Choi <cw00.choi@samsung.com>
Mon, 30 Dec 2019 00:59:05 +0000 (09:59 +0900)
commit5af744ebae856a50e8b5e208a5acf28713a4ce98
tree26f1fc739896b4503768c1062756ce219e786034
parentc49a5d0968690a08378fd14371678c3479f269aa
PM / devfreq: Add dynamic scaling for imx8m ddr controller

Add driver for dynamic scaling the DDR Controller on imx8m chips. Actual
frequency switching is implemented inside TF-A, this driver wraps the
SMC calls and synchronizes the clk tree.

The DRAM clocks on imx8m have the following structure (abridged):

 +----------+       |\            +------+
 | dram_pll |-------|M| dram_core |      |
 +----------+       |U|---------->| D    |
                 /--|X|           |  D   |
   dram_alt_root |  |/            |   R  |
                 |                |    C |
            +---------+           |      |
            |FIX DIV/4|           |      |
            +---------+           |      |
  composite:     |                |      |
 +----------+    |                |      |
 | dram_alt |----/                |      |
 +----------+                     |      |
 | dram_apb |-------------------->|      |
 +----------+                     +------+

The dram_pll is used for higher rates and dram_alt is used for lower
rates. The dram_alt and dram_apb clocks are "imx composite" and their
parent can also be modified.

This driver will prepare/enable the new parents ahead of switching (so
that the expected roots are enabled) and afterwards it will call
clk_set_parent to ensure the parents in clock framework are up-to-date.

The driver relies on dram_pll dram_alt and dram_apb being marked with
CLK_GET_RATE_NOCACHE for rate updates.

Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
[cw00.choi: Edit the COMPILE_TEST module dependency in Kconfig]
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
drivers/devfreq/Kconfig
drivers/devfreq/Makefile
drivers/devfreq/imx8m-ddrc.c [new file with mode: 0644]