mirror of
https://github.com/torvalds/linux.git
synced 2024-11-30 16:11:38 +00:00
1ccea77e2a
Based on 2 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not see http www gnu org licenses this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details [based] [from] [clk] [highbank] [c] you should have received a copy of the gnu general public license along with this program if not see http www gnu org licenses extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 355 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Jilayne Lovejoy <opensource@jilayne.com> Reviewed-by: Steve Winslow <swinslow@gmail.com> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190519154041.837383322@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
72 lines
1.6 KiB
C
72 lines
1.6 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Zynq power management
|
|
*
|
|
* Copyright (C) 2012 - 2014 Xilinx
|
|
*
|
|
* Sören Brinkmann <soren.brinkmann@xilinx.com>
|
|
*/
|
|
|
|
#include <linux/io.h>
|
|
#include <linux/of_address.h>
|
|
#include <linux/of_device.h>
|
|
#include "common.h"
|
|
|
|
/* register offsets */
|
|
#define DDRC_CTRL_REG1_OFFS 0x60
|
|
#define DDRC_DRAM_PARAM_REG3_OFFS 0x20
|
|
|
|
/* bitfields */
|
|
#define DDRC_CLOCKSTOP_MASK BIT(23)
|
|
#define DDRC_SELFREFRESH_MASK BIT(12)
|
|
|
|
static void __iomem *ddrc_base;
|
|
|
|
/**
|
|
* zynq_pm_ioremap() - Create IO mappings
|
|
* @comp: DT compatible string
|
|
* Return: Pointer to the mapped memory or NULL.
|
|
*
|
|
* Remap the memory region for a compatible DT node.
|
|
*/
|
|
static void __iomem *zynq_pm_ioremap(const char *comp)
|
|
{
|
|
struct device_node *np;
|
|
void __iomem *base = NULL;
|
|
|
|
np = of_find_compatible_node(NULL, NULL, comp);
|
|
if (np) {
|
|
base = of_iomap(np, 0);
|
|
of_node_put(np);
|
|
} else {
|
|
pr_warn("%s: no compatible node found for '%s'\n", __func__,
|
|
comp);
|
|
}
|
|
|
|
return base;
|
|
}
|
|
|
|
/**
|
|
* zynq_pm_late_init() - Power management init
|
|
*
|
|
* Initialization of power management related features and infrastructure.
|
|
*/
|
|
void __init zynq_pm_late_init(void)
|
|
{
|
|
u32 reg;
|
|
|
|
ddrc_base = zynq_pm_ioremap("xlnx,zynq-ddrc-a05");
|
|
if (!ddrc_base) {
|
|
pr_warn("%s: Unable to map DDRC IO memory.\n", __func__);
|
|
} else {
|
|
/*
|
|
* Enable DDRC clock stop feature. The HW takes care of
|
|
* entering/exiting the correct mode depending
|
|
* on activity state.
|
|
*/
|
|
reg = readl(ddrc_base + DDRC_DRAM_PARAM_REG3_OFFS);
|
|
reg |= DDRC_CLOCKSTOP_MASK;
|
|
writel(reg, ddrc_base + DDRC_DRAM_PARAM_REG3_OFFS);
|
|
}
|
|
}
|