Lines Matching +full:ras +full:- +full:to +full:- +full:cas
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright 2011-2014 Freescale Semiconductor, Inc.
12 #include <linux/irqchip/arm-gic.h>
14 #include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
22 #include <asm/proc-fns.h>
99 0x56c, 0x578, 0x588, 0x594, /* CAS, RAS, SDCLK_0, SDCLK_1 */
111 0x464, 0x490, 0x4ac, 0x4b0, /* CAS, RAS, SDCLK_0, SDCLK_1 */
123 0x300, 0x31c, 0x338, 0x5ac, /* CAS, RAS, SDCLK_0, GPR_ADDS */
138 0x300, 0x2fc, 0x32c, 0x5f4, /* CAS, RAS, SDCLK_0, GPR_ADDS */
144 0x244, 0x248, 0x24c, 0x250, /* DQM0, DQM1, RAS, CAS */
145 0x27c, 0x498, 0x4a4, 0x490, /* SDCLK0, GPR_B0DS-B1DS, GPR_ADDS */
151 .mmdc_compat = "fsl,imx6q-mmdc",
152 .src_compat = "fsl,imx6q-src",
153 .iomuxc_compat = "fsl,imx6q-iomuxc",
154 .gpc_compat = "fsl,imx6q-gpc",
155 .pl310_compat = "arm,pl310-cache",
161 .mmdc_compat = "fsl,imx6q-mmdc",
162 .src_compat = "fsl,imx6q-src",
163 .iomuxc_compat = "fsl,imx6dl-iomuxc",
164 .gpc_compat = "fsl,imx6q-gpc",
165 .pl310_compat = "arm,pl310-cache",
171 .mmdc_compat = "fsl,imx6sl-mmdc",
172 .src_compat = "fsl,imx6sl-src",
173 .iomuxc_compat = "fsl,imx6sl-iomuxc",
174 .gpc_compat = "fsl,imx6sl-gpc",
175 .pl310_compat = "arm,pl310-cache",
181 .mmdc_compat = "fsl,imx6sll-mmdc",
182 .src_compat = "fsl,imx6sll-src",
183 .iomuxc_compat = "fsl,imx6sll-iomuxc",
184 .gpc_compat = "fsl,imx6sll-gpc",
185 .pl310_compat = "arm,pl310-cache",
191 .mmdc_compat = "fsl,imx6sx-mmdc",
192 .src_compat = "fsl,imx6sx-src",
193 .iomuxc_compat = "fsl,imx6sx-iomuxc",
194 .gpc_compat = "fsl,imx6sx-gpc",
195 .pl310_compat = "arm,pl310-cache",
201 .mmdc_compat = "fsl,imx6ul-mmdc",
202 .src_compat = "fsl,imx6ul-src",
203 .iomuxc_compat = "fsl,imx6ul-iomuxc",
204 .gpc_compat = "fsl,imx6ul-gpc",
212 * suspend code(arch/arm/mach-imx/suspend-imx6.S), if this struct
214 * arch/arm/mach-imx/suspend-imx6.S must be also changed accordingly,
215 * otherwise, the suspend to ocram function will be broken!
229 u32 mmdc_io_val[MX6_MAX_MMDC_IO_NUM][2]; /* To save offset and value */
247 * need to mask all interrupts in GPC before in imx6_enable_rbc()
265 * need to delay at least 2 cycles of CKIL(32K) in imx6_enable_rbc()
266 * due to hardware design requirement, which is in imx6_enable_rbc()
335 return -EINVAL; in imx6_set_lpm()
339 * ERR007265: CCM: When improper low-power sequence is used, in imx6_set_lpm()
343 * 1) Software should trigger IRQ #32 (IOMUX) to be always pending in imx6_set_lpm()
346 * Low-Power mode. in imx6_set_lpm()
347 * 3) Software should mask IRQ #32 right after CCM Low-Power mode in imx6_set_lpm()
348 * is set (set bits 0-1 of CCM_CLPCR). in imx6_set_lpm()
368 * as we need to float DDR IO. in imx6q_suspend_finish()
371 /* check if need to flush internal L2 cache */ in imx6q_suspend_finish()
373 suspend_ocram_base)->l2_base.vbase) in imx6q_suspend_finish()
403 * RBC setting, so we do NOT need to do that here. in imx6q_pm_enter()
421 return -EINVAL; in imx6q_pm_enter()
446 return -ENODEV; in imx6_pm_get_base()
452 base->pbase = res.start; in imx6_pm_get_base()
453 base->vbase = ioremap(res.start, resource_size(&res)); in imx6_pm_get_base()
454 if (!base->vbase) in imx6_pm_get_base()
455 ret = -ENOMEM; in imx6_pm_get_base()
477 return -EINVAL; in imx6q_suspend_init()
480 node = of_find_compatible_node(NULL, NULL, "mmio-sram"); in imx6q_suspend_init()
482 pr_warn("%s: failed to find ocram node!\n", __func__); in imx6q_suspend_init()
483 return -ENODEV; in imx6q_suspend_init()
488 pr_warn("%s: failed to find ocram device!\n", __func__); in imx6q_suspend_init()
489 ret = -ENODEV; in imx6q_suspend_init()
493 ocram_pool = gen_pool_get(&pdev->dev, NULL); in imx6q_suspend_init()
496 ret = -ENODEV; in imx6q_suspend_init()
502 pr_warn("%s: unable to alloc ocram!\n", __func__); in imx6q_suspend_init()
503 ret = -ENOMEM; in imx6q_suspend_init()
514 pm_info->pbase = ocram_pbase; in imx6q_suspend_init()
515 pm_info->resume_addr = __pa_symbol(v7_cpu_resume); in imx6q_suspend_init()
516 pm_info->pm_info_size = sizeof(*pm_info); in imx6q_suspend_init()
522 pm_info->ccm_base.vbase = ccm_base; in imx6q_suspend_init()
524 ret = imx6_pm_get_base(&pm_info->mmdc_base, socdata->mmdc_compat); in imx6q_suspend_init()
526 pr_warn("%s: failed to get mmdc base %d!\n", __func__, ret); in imx6q_suspend_init()
530 ret = imx6_pm_get_base(&pm_info->src_base, socdata->src_compat); in imx6q_suspend_init()
532 pr_warn("%s: failed to get src base %d!\n", __func__, ret); in imx6q_suspend_init()
536 ret = imx6_pm_get_base(&pm_info->iomuxc_base, socdata->iomuxc_compat); in imx6q_suspend_init()
538 pr_warn("%s: failed to get iomuxc base %d!\n", __func__, ret); in imx6q_suspend_init()
542 ret = imx6_pm_get_base(&pm_info->gpc_base, socdata->gpc_compat); in imx6q_suspend_init()
544 pr_warn("%s: failed to get gpc base %d!\n", __func__, ret); in imx6q_suspend_init()
548 if (socdata->pl310_compat) { in imx6q_suspend_init()
549 ret = imx6_pm_get_base(&pm_info->l2_base, socdata->pl310_compat); in imx6q_suspend_init()
551 pr_warn("%s: failed to get pl310-cache base %d!\n", in imx6q_suspend_init()
557 pm_info->ddr_type = imx_mmdc_get_ddr_type(); in imx6q_suspend_init()
558 pm_info->mmdc_io_num = socdata->mmdc_io_num; in imx6q_suspend_init()
559 mmdc_offset_array = socdata->mmdc_io_offset; in imx6q_suspend_init()
561 for (i = 0; i < pm_info->mmdc_io_num; i++) { in imx6q_suspend_init()
562 pm_info->mmdc_io_val[i][0] = in imx6q_suspend_init()
564 pm_info->mmdc_io_val[i][1] = in imx6q_suspend_init()
565 readl_relaxed(pm_info->iomuxc_base.vbase + in imx6q_suspend_init()
572 MX6Q_SUSPEND_OCRAM_SIZE - sizeof(*pm_info)); in imx6q_suspend_init()
577 iounmap(pm_info->gpc_base.vbase); in imx6q_suspend_init()
579 iounmap(pm_info->iomuxc_base.vbase); in imx6q_suspend_init()
581 iounmap(pm_info->src_base.vbase); in imx6q_suspend_init()
583 iounmap(pm_info->mmdc_base.vbase); in imx6q_suspend_init()
585 put_device(&pdev->dev); in imx6q_suspend_init()
610 * Force IOMUXC irq pending, so that the interrupt to GPC can be in imx6_pm_common_init()
611 * used to deassert dsm_request signal when the signal gets in imx6_pm_common_init()
614 gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); in imx6_pm_common_init()
628 pr_emerg("Unable to poweroff system\n"); in imx6_pm_stby_poweroff()
636 return -EBUSY; in imx6_pm_stby_poweroff_probe()
653 * Initialize CCM_CLPCR_LPM into RUN mode to avoid ARM core in imx6_pm_ccm_init()
660 if (of_property_read_bool(np, "fsl,pmic-stby-poweroff")) in imx6_pm_ccm_init()
684 gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); in imx6sl_pm_init()