summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx/mach-imx6sx.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-imx/mach-imx6sx.c')
-rw-r--r--arch/arm/mach-imx/mach-imx6sx.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/mach-imx6sx.c b/arch/arm/mach-imx/mach-imx6sx.c
index 96c79a0bb4f5..c92decf51a21 100644
--- a/arch/arm/mach-imx/mach-imx6sx.c
+++ b/arch/arm/mach-imx/mach-imx6sx.c
@@ -29,6 +29,9 @@
#include "cpuidle.h"
#include "hardware.h"
+static struct platform_device imx6slx_cpufreq_pdev = {
+ .name = "imx6-cpufreq",
+};
static struct flexcan_platform_data flexcan_pdata[2];
static int flexcan_en_gpio;
static int flexcan_stby_gpio;
@@ -190,6 +193,25 @@ static void __init imx6sx_init_machine(void)
imx6sx_qos_init();
}
+static void __init imx6slx_opp_init(struct device *cpu_dev)
+{
+ struct device_node *np;
+
+ np = of_find_node_by_path("/cpus/cpu@0");
+ if (!np) {
+ pr_warn("failed to find cpu0 node\n");
+ return;
+ }
+
+ cpu_dev->of_node = np;
+ if (of_init_opp_table(cpu_dev)) {
+ pr_warn("failed to init OPP table\n");
+ goto put_node;
+ }
+
+put_node:
+ of_node_put(np);
+}
static void __init imx6sx_init_late(void)
{
struct regmap *gpr;
@@ -209,6 +231,11 @@ static void __init imx6sx_init_late(void)
if (of_machine_is_compatible("fsl,imx6sx-17x17-arm2") ||
of_machine_is_compatible("fsl,imx6sx-sdb"))
imx6sx_arm2_flexcan_fixup();
+
+ if (IS_ENABLED(CONFIG_ARM_IMX6_CPUFREQ)) {
+ imx6slx_opp_init(&imx6slx_cpufreq_pdev.dev);
+ platform_device_register(&imx6slx_cpufreq_pdev);
+ }
}
static void __init imx6sx_map_io(void)