MLK-16804-06 driver: soc: Optimize the DDR frequency in audio playback case
authorBai Ping <ping.bai@nxp.com>
Wed, 8 Nov 2017 09:58:00 +0000 (17:58 +0800)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
If audio device is the only that access to ddr memory, the DDR
frequency can be reduce to 25MHz to save power. when DDR run in
25MHz frequency, the memory bandwidth is about 66MB/s, it can
meet the performance requirement for audio only case.

Signed-off-by: Bai Ping <ping.bai@nxp.com>
Reviewed-by: Anson Huang <anson.huang@nxp.com>
(cherry picked from commit 7c2389b6dca053ae4b4a56b3588978909769008c)

drivers/soc/imx/busfreq-imx8mq.c

index f4d970d..4054c37 100644 (file)
@@ -102,14 +102,19 @@ static void reduce_bus_freq(void)
        clk_prepare_enable(sys1_pll_40m);
        clk_prepare_enable(dram_alt_root);
 
+       /*
+        * below piece of code has some redundant part, keep
+        * it at present, we may need update the audio freq
+        * in the future if needed.
+        */
        if (audio_bus_count) {
-               clk_prepare_enable(sys1_pll_400m);
+               clk_prepare_enable(sys1_pll_100m);
 
-               update_bus_freq(AUDIO_FREQ_400MTS);
+               update_bus_freq(LOW_BUS_FREQ_100MTS);
 
                /* correct the clock tree info */
-               clk_disable_unprepare(sys1_pll_400m);
-               clk_set_parent(dram_alt_src, sys1_pll_400m);
+               clk_disable_unprepare(sys1_pll_100m);
+               clk_set_parent(dram_alt_src, sys1_pll_100m);
                clk_set_parent(dram_core_clk, dram_alt_root);
                clk_set_parent(dram_apb_src, sys1_pll_40m);
                clk_set_rate(dram_apb_pre_div, 20000000);
@@ -128,6 +133,7 @@ static void reduce_bus_freq(void)
                clk_set_parent(dram_core_clk, dram_alt_root);
                clk_set_parent(dram_apb_src, sys1_pll_40m);
                clk_set_rate(dram_apb_pre_div, 20000000);
+               clk_prepare_enable(sys1_pll_400m);
 
                low_bus_freq_mode = 1;
                audio_bus_freq_mode = 0;
@@ -138,7 +144,7 @@ static void reduce_bus_freq(void)
        clk_disable_unprepare(dram_alt_root);
 
        if (audio_bus_freq_mode)
-               printk(KERN_DEBUG "ddrc freq set to audio mode: 100MHz\n");
+               printk(KERN_DEBUG "ddrc freq set to audio mode: 25MHz\n");
        if (low_bus_freq_mode)
                printk(KERN_DEBUG "ddrc freq set to low bus mode: 25MHz\n");
 }