#define SRC_GPR1_V2 0x074
#define SRC_A7RCR0 0x004
#define SRC_A7RCR1 0x008
+#define SRC_M4RCR 0x00C
#define BP_SRC_A7RCR0_A7_CORE_RESET0 0
#define BP_SRC_A7RCR1_A7_CORE1_ENABLE 1
src_base = of_iomap(np, 0);
WARN_ON(!src_base);
- if (cpu_is_imx7d())
+ if (cpu_is_imx7d()) {
+ val = readl_relaxed(src_base + SRC_M4RCR);
+ if ((val & BIT(3)) == BIT(3))
+ m4_is_enabled = true;
+ else
+ m4_is_enabled = false;
return;
+ }
imx_reset_controller.of_node = np;
if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
int i;
void __iomem *shared_mem_base;
- if (!imx_src_is_m4_enabled())
+ if (!(imx_src_is_m4_enabled()))
return 0;
amp_power_mutex = imx_sema4_mutex_create(0, MCC_POWER_SHMEM_NUMBER);
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/types.h>
+#include <soc/imx/src.h>
#include "clk.h"
for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)
clk_prepare_enable(clks[clks_init_on[i]]);
+ if (imx_src_is_m4_enabled()) {
+ imx_clk_set_parent(clks[IMX7D_ARM_M4_ROOT_SRC], clks[IMX7D_PLL_SYS_MAIN_240M_CLK]);
+ imx_clk_prepare_enable(clks[IMX7D_ARM_M4_ROOT_CLK]);
+ }
+
imx_clk_set_parent(clks[IMX7D_PLL_ARM_MAIN_BYPASS], clks[IMX7D_PLL_ARM_MAIN]);
imx_clk_set_parent(clks[IMX7D_PLL_DRAM_MAIN_BYPASS], clks[IMX7D_PLL_DRAM_MAIN]);
imx_clk_set_parent(clks[IMX7D_PLL_SYS_MAIN_BYPASS], clks[IMX7D_PLL_SYS_MAIN]);