summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2014-12-17 18:37:49 +0100
committerStefan Agner <stefan.agner@toradex.com>2014-12-17 18:37:49 +0100
commit8904ab6944d89c5ca3b573512eee178167656040 (patch)
treedaa19a430d7b0f9e966fef41fbb4075e27670363
parent8d05afbfffc8bb7b84f3b48e44bb194960e8c682 (diff)
parentd5d322d315df1c2ed2fd68dc74d0c3aa651d397e (diff)
Merge branch 'vf610-suspend-v2-3.18-standby-only' into toradex_vf_3.18-next
-rw-r--r--arch/arm/boot/dts/vfxxx.dtsi21
-rw-r--r--arch/arm/mach-imx/pm-vf610.c53
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;
}