ARM: omap2+: control: add support for auxiliary control module instances
authorTero Kristo <t-kristo@ti.com>
Wed, 14 Mar 2018 13:53:10 +0000 (15:53 +0200)
committerTony Lindgren <tony@atomide.com>
Tue, 20 Mar 2018 15:06:07 +0000 (08:06 -0700)
Control module can have multiple instances in a system, each with separate
address space and features. Add base support for these auxiliary instances,
with support for syscon and clock mappings under them.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
Tested-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/control.c
include/linux/clk/ti.h

index bd8089f..632adb2 100644 (file)
@@ -623,6 +623,7 @@ void __init omap3_ctrl_init(void)
 
 struct control_init_data {
        int index;
+       void __iomem *mem;
        s16 offset;
 };
 
@@ -660,15 +661,21 @@ int __init omap2_control_base_init(void)
        struct device_node *np;
        const struct of_device_id *match;
        struct control_init_data *data;
+       void __iomem *mem;
 
        for_each_matching_node_and_match(np, omap_scrm_dt_match_table, &match) {
                data = (struct control_init_data *)match->data;
 
-               omap2_ctrl_base = of_iomap(np, 0);
-               if (!omap2_ctrl_base)
+               mem = of_iomap(np, 0);
+               if (!mem)
                        return -ENOMEM;
 
-               omap2_ctrl_offset = data->offset;
+               if (data->index == TI_CLKM_CTRL) {
+                       omap2_ctrl_base = mem;
+                       omap2_ctrl_offset = data->offset;
+               }
+
+               data->mem = mem;
        }
 
        return 0;
@@ -713,7 +720,7 @@ int __init omap_control_init(void)
                } else {
                        /* No scm_conf found, direct access */
                        ret = omap2_clk_provider_init(np, data->index, NULL,
-                                                     omap2_ctrl_base);
+                                                     data->mem);
                        if (ret)
                                return ret;
                }
index d18da83..7e3bcee 100644 (file)
@@ -203,6 +203,7 @@ enum {
        TI_CLKM_PRM,
        TI_CLKM_SCRM,
        TI_CLKM_CTRL,
+       TI_CLKM_CTRL_AUX,
        TI_CLKM_PLLSS,
        CLK_MAX_MEMMAPS
 };