diff options
author | Stefan Agner <stefan.agner@toradex.com> | 2014-12-17 18:37:49 +0100 |
---|---|---|
committer | Stefan Agner <stefan.agner@toradex.com> | 2014-12-17 18:37:49 +0100 |
commit | 8904ab6944d89c5ca3b573512eee178167656040 (patch) | |
tree | daa19a430d7b0f9e966fef41fbb4075e27670363 | |
parent | 8d05afbfffc8bb7b84f3b48e44bb194960e8c682 (diff) | |
parent | d5d322d315df1c2ed2fd68dc74d0c3aa651d397e (diff) |
Merge branch 'vf610-suspend-v2-3.18-standby-only' into toradex_vf_3.18-next
-rw-r--r-- | arch/arm/boot/dts/vfxxx.dtsi | 21 | ||||
-rw-r--r-- | arch/arm/mach-imx/pm-vf610.c | 53 |
2 files changed, 7 insertions, 67 deletions
diff --git a/arch/arm/boot/dts/vfxxx.dtsi b/arch/arm/boot/dts/vfxxx.dtsi index 8c09b4b6a17e..5b2c14939110 100644 --- a/arch/arm/boot/dts/vfxxx.dtsi +++ b/arch/arm/boot/dts/vfxxx.dtsi @@ -56,27 +56,6 @@ compatible = "simple-bus"; ranges; - ocram0: sram@3f000000 { - compatible = "mmio-sram"; - reg = <0x3f000000 0x40000>; - }; - - ocram1: sram@3f040000 { - compatible = "mmio-sram"; - reg = <0x3f040000 0x40000>; - }; - - gfxram0: sram@3f400000 { - compatible = "mmio-sram"; - reg = <0x3f400000 0x80000>; - }; - - /* used by L2 cache */ - gfxram1: sram@3f480000 { - compatible = "mmio-sram"; - reg = <0x3f480000 0x80000>; - }; - aips0: aips-bus@40000000 { compatible = "fsl,aips-bus", "simple-bus"; #address-cells = <1>; diff --git a/arch/arm/mach-imx/pm-vf610.c b/arch/arm/mach-imx/pm-vf610.c index e85e1b7e0e1c..205c874d3660 100644 --- a/arch/arm/mach-imx/pm-vf610.c +++ b/arch/arm/mach-imx/pm-vf610.c @@ -21,6 +21,7 @@ #include <linux/of_address.h> #include <linux/of_platform.h> #include <linux/regmap.h> +#include <linux/slab.h> #include <linux/suspend.h> #include <linux/clk.h> #include <asm/cacheflush.h> @@ -91,7 +92,7 @@ #define VF_UART_PHYSICAL_BASE VF_UART_BASE(CONFIG_DEBUG_VF_UART_PORT) static void __iomem *ccm_base; -static void __iomem *suspend_ocram_base; +static struct vf610_cpu_pm_info *pm_info; /* * suspend ocram space layout: @@ -189,7 +190,6 @@ int vf610_set_lpm(enum vf610_cpu_pwr_mode mode) u32 ccr = readl_relaxed(ccm_base + CCR); u32 ccsr = readl_relaxed(ccm_base + CCSR); u32 cclpcr = readl_relaxed(ccm_base + CLPCR); - struct vf610_cpu_pm_info *pm_info = suspend_ocram_base; void __iomem *gpc_base = pm_info->gpc_base.vbase; u32 gpc_pgcr = readl_relaxed(gpc_base + GPC_PGCR); void __iomem *anatop = pm_info->anatop_base.vbase; @@ -328,12 +328,6 @@ out: static int __init vf610_suspend_init(const struct vf610_pm_socdata *socdata) { - phys_addr_t ocram_pbase; - struct device_node *node; - struct platform_device *pdev; - struct vf610_cpu_pm_info *pm_info; - struct gen_pool *ocram_pool; - unsigned long ocram_base; int ret = 0; suspend_set_ops(&vf610_pm_ops); @@ -343,40 +337,7 @@ static int __init vf610_suspend_init(const struct vf610_pm_socdata *socdata) return -EINVAL; } - node = of_find_compatible_node(NULL, NULL, "mmio-sram"); - if (!node) { - pr_warn("%s: failed to find ocram node!\n", __func__); - return -ENODEV; - } - - pdev = of_find_device_by_node(node); - if (!pdev) { - pr_warn("%s: failed to find ocram device!\n", __func__); - ret = -ENODEV; - goto put_node; - } - - ocram_pool = dev_get_gen_pool(&pdev->dev); - if (!ocram_pool) { - pr_warn("%s: ocram pool unavailable!\n", __func__); - ret = -ENODEV; - goto put_node; - } - - ocram_base = gen_pool_alloc(ocram_pool, VF610_SUSPEND_OCRAM_SIZE); - if (!ocram_base) { - pr_warn("%s: unable to alloc ocram!\n", __func__); - ret = -ENOMEM; - goto put_node; - } - - ocram_pbase = gen_pool_virt_to_phys(ocram_pool, ocram_base); - - suspend_ocram_base = __arm_ioremap_exec(ocram_pbase, - VF610_SUSPEND_OCRAM_SIZE, false); - - pm_info = suspend_ocram_base; - pm_info->pbase = ocram_pbase; + pm_info = kzalloc(sizeof(*pm_info), GFP_KERNEL); pm_info->pm_info_size = sizeof(*pm_info); /* @@ -389,7 +350,7 @@ static int __init vf610_suspend_init(const struct vf610_pm_socdata *socdata) ret = imx_pm_get_base(&pm_info->anatop_base, socdata->anatop_compat); if (ret) { pr_warn("%s: failed to get anatop base %d!\n", __func__, ret); - goto put_node; + goto free_memory; } ret = imx_pm_get_base(&pm_info->gpc_base, socdata->gpc_compat); @@ -398,12 +359,12 @@ static int __init vf610_suspend_init(const struct vf610_pm_socdata *socdata) goto gpc_map_failed; } - goto put_node; + return 0; gpc_map_failed: iounmap(&pm_info->anatop_base.vbase); -put_node: - of_node_put(node); +free_memory: + kfree(pm_info); return ret; } |