Lines Matching +full:imx6sl +full:- +full:ccm
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright 2011-2014 Freescale Semiconductor, Inc.
13 #include <linux/irqchip/arm-gic.h>
15 #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
23 #include <asm/proc-fns.h>
146 0x27c, 0x498, 0x4a4, 0x490, /* SDCLK0, GPR_B0DS-B1DS, GPR_ADDS */
152 .mmdc_compat = "fsl,imx6q-mmdc",
153 .src_compat = "fsl,imx6q-src",
154 .iomuxc_compat = "fsl,imx6q-iomuxc",
155 .gpc_compat = "fsl,imx6q-gpc",
156 .pl310_compat = "arm,pl310-cache",
162 .mmdc_compat = "fsl,imx6q-mmdc",
163 .src_compat = "fsl,imx6q-src",
164 .iomuxc_compat = "fsl,imx6dl-iomuxc",
165 .gpc_compat = "fsl,imx6q-gpc",
166 .pl310_compat = "arm,pl310-cache",
172 .mmdc_compat = "fsl,imx6sl-mmdc",
173 .src_compat = "fsl,imx6sl-src",
174 .iomuxc_compat = "fsl,imx6sl-iomuxc",
175 .gpc_compat = "fsl,imx6sl-gpc",
176 .pl310_compat = "arm,pl310-cache",
182 .mmdc_compat = "fsl,imx6sll-mmdc",
183 .src_compat = "fsl,imx6sll-src",
184 .iomuxc_compat = "fsl,imx6sll-iomuxc",
185 .gpc_compat = "fsl,imx6sll-gpc",
186 .pl310_compat = "arm,pl310-cache",
192 .mmdc_compat = "fsl,imx6sx-mmdc",
193 .src_compat = "fsl,imx6sx-src",
194 .iomuxc_compat = "fsl,imx6sx-iomuxc",
195 .gpc_compat = "fsl,imx6sx-gpc",
196 .pl310_compat = "arm,pl310-cache",
202 .mmdc_compat = "fsl,imx6ul-mmdc",
203 .src_compat = "fsl,imx6ul-src",
204 .iomuxc_compat = "fsl,imx6ul-iomuxc",
205 .gpc_compat = "fsl,imx6ul-gpc",
213 * suspend code(arch/arm/mach-imx/suspend-imx6.S), if this struct
215 * arch/arm/mach-imx/suspend-imx6.S must be also changed accordingly,
336 return -EINVAL; in imx6_set_lpm()
340 * ERR007265: CCM: When improper low-power sequence is used, in imx6_set_lpm()
346 * 2) Software should then unmask IRQ #32 in GPC before setting CCM in imx6_set_lpm()
347 * Low-Power mode. in imx6_set_lpm()
348 * 3) Software should mask IRQ #32 right after CCM Low-Power mode in imx6_set_lpm()
349 * is set (set bits 0-1 of CCM_CLPCR). in imx6_set_lpm()
374 suspend_ocram_base)->l2_base.vbase) in imx6q_suspend_finish()
422 return -EINVAL; in imx6q_pm_enter()
447 return -ENODEV; in imx6_pm_get_base()
453 base->pbase = res.start; in imx6_pm_get_base()
454 base->vbase = ioremap(res.start, resource_size(&res)); in imx6_pm_get_base()
455 if (!base->vbase) in imx6_pm_get_base()
456 ret = -ENOMEM; in imx6_pm_get_base()
478 return -EINVAL; in imx6q_suspend_init()
481 node = of_find_compatible_node(NULL, NULL, "mmio-sram"); in imx6q_suspend_init()
484 return -ENODEV; in imx6q_suspend_init()
490 ret = -ENODEV; in imx6q_suspend_init()
494 ocram_pool = gen_pool_get(&pdev->dev, NULL); in imx6q_suspend_init()
497 ret = -ENODEV; in imx6q_suspend_init()
504 ret = -ENOMEM; in imx6q_suspend_init()
515 pm_info->pbase = ocram_pbase; in imx6q_suspend_init()
516 pm_info->resume_addr = __pa_symbol(v7_cpu_resume); in imx6q_suspend_init()
517 pm_info->pm_info_size = sizeof(*pm_info); in imx6q_suspend_init()
520 * ccm physical address is not used by asm code currently, in imx6q_suspend_init()
521 * so get ccm virtual address directly. in imx6q_suspend_init()
523 pm_info->ccm_base.vbase = ccm_base; in imx6q_suspend_init()
525 ret = imx6_pm_get_base(&pm_info->mmdc_base, socdata->mmdc_compat); in imx6q_suspend_init()
531 ret = imx6_pm_get_base(&pm_info->src_base, socdata->src_compat); in imx6q_suspend_init()
537 ret = imx6_pm_get_base(&pm_info->iomuxc_base, socdata->iomuxc_compat); in imx6q_suspend_init()
543 ret = imx6_pm_get_base(&pm_info->gpc_base, socdata->gpc_compat); in imx6q_suspend_init()
549 if (socdata->pl310_compat) { in imx6q_suspend_init()
550 ret = imx6_pm_get_base(&pm_info->l2_base, socdata->pl310_compat); in imx6q_suspend_init()
552 pr_warn("%s: failed to get pl310-cache base %d!\n", in imx6q_suspend_init()
558 pm_info->ddr_type = imx_mmdc_get_ddr_type(); in imx6q_suspend_init()
559 pm_info->mmdc_io_num = socdata->mmdc_io_num; in imx6q_suspend_init()
560 mmdc_offset_array = socdata->mmdc_io_offset; in imx6q_suspend_init()
562 for (i = 0; i < pm_info->mmdc_io_num; i++) { in imx6q_suspend_init()
563 pm_info->mmdc_io_val[i][0] = in imx6q_suspend_init()
565 pm_info->mmdc_io_val[i][1] = in imx6q_suspend_init()
566 readl_relaxed(pm_info->iomuxc_base.vbase + in imx6q_suspend_init()
573 MX6Q_SUSPEND_OCRAM_SIZE - sizeof(*pm_info)); in imx6q_suspend_init()
580 iounmap(pm_info->gpc_base.vbase); in imx6q_suspend_init()
582 iounmap(pm_info->iomuxc_base.vbase); in imx6q_suspend_init()
584 iounmap(pm_info->src_base.vbase); in imx6q_suspend_init()
586 iounmap(pm_info->mmdc_base.vbase); in imx6q_suspend_init()
588 put_device(&pdev->dev); in imx6q_suspend_init()
617 gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); in imx6_pm_common_init()
639 return -EBUSY; in imx6_pm_stby_poweroff_probe()
663 if (of_property_read_bool(np, "fsl,pmic-stby-poweroff")) in imx6_pm_ccm_init()
687 gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); in imx6sl_pm_init()