-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'soc-3.13-2' of git://git.infradead.org/linux-mvebu into ne…
…xt/soc From Jason Cooper: mvebu soc changes for v3.13 (round 2) - kirkwood - remove mbus init, pcie clk init - retain MAC addr for DT ethernet (work around broken IP) - docs: clarify Armada SoCs * tag 'soc-3.13-2' of git://git.infradead.org/linux-mvebu: Documentation: arm/Marvell: clarify Armada SoCs that match 78xx0 pattern ARM: kirkwood: retain MAC address for DT ethernet ARM: kirkwood: Remove unneeded PCIe clock adding ARM: kirkwood: Remove unneeded MBus initialization ARM: kirkwood: Add standby support Signed-off-by: Kevin Hilman <khilman@linaro.org>
- Loading branch information
Showing
7 changed files
with
169 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* | ||
* Power Management driver for Marvell Kirkwood SoCs | ||
* | ||
* Copyright (C) 2013 Ezequiel Garcia <ezequiel@free-electrons.com> | ||
* Copyright (C) 2010 Simon Guinot <sguinot@lacie.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License, | ||
* version 2 of the License. | ||
* | ||
* 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. | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/suspend.h> | ||
#include <linux/io.h> | ||
#include <mach/bridge-regs.h> | ||
|
||
static void __iomem *ddr_operation_base; | ||
|
||
static void kirkwood_low_power(void) | ||
{ | ||
u32 mem_pm_ctrl; | ||
|
||
mem_pm_ctrl = readl(MEMORY_PM_CTRL); | ||
|
||
/* Set peripherals to low-power mode */ | ||
writel_relaxed(~0, MEMORY_PM_CTRL); | ||
|
||
/* Set DDR in self-refresh */ | ||
writel_relaxed(0x7, ddr_operation_base); | ||
|
||
/* | ||
* Set CPU in wait-for-interrupt state. | ||
* This disables the CPU core clocks, | ||
* the array clocks, and also the L2 controller. | ||
*/ | ||
cpu_do_idle(); | ||
|
||
writel_relaxed(mem_pm_ctrl, MEMORY_PM_CTRL); | ||
} | ||
|
||
static int kirkwood_suspend_enter(suspend_state_t state) | ||
{ | ||
switch (state) { | ||
case PM_SUSPEND_STANDBY: | ||
kirkwood_low_power(); | ||
break; | ||
default: | ||
return -EINVAL; | ||
} | ||
return 0; | ||
} | ||
|
||
static int kirkwood_pm_valid_standby(suspend_state_t state) | ||
{ | ||
return state == PM_SUSPEND_STANDBY; | ||
} | ||
|
||
static const struct platform_suspend_ops kirkwood_suspend_ops = { | ||
.enter = kirkwood_suspend_enter, | ||
.valid = kirkwood_pm_valid_standby, | ||
}; | ||
|
||
int __init kirkwood_pm_init(void) | ||
{ | ||
ddr_operation_base = ioremap(DDR_OPERATION_BASE, 4); | ||
suspend_set_ops(&kirkwood_suspend_ops); | ||
return 0; | ||
} |