linux/arch/arm
Thomas Petazzoni 8446be5d03 ARM: mvebu: implement suspend/resume support for Armada XP
This commit implements the core of the platform code to enable
suspend/resume on Armada XP. It registers the platform_suspend_ops
structure, and implements the ->enter() hook of this structure.

It is worth mentioning that this commit only provides the SoC-level
part of suspend/resume, which calls into some board-specific code
provided in a follow-up commit.

The most important thing that this SoC-level code has to do is to
build an in-memory structure that contains a magic number, the return
address in the kernel after resume, and a set of address/value
pairs. This structure is used by the bootloader to restore a certain
number of registers (according to the set of address/value pairs) and
then jump back into the kernel at the provided location.

The code also puts the SDRAM into self-refresh mode, before calling
into board-specific code to actually enter the suspend to RAM state.

[ jac - add email exchange between Andrew Lunn and Thomas Petazzoni to better
describe who consumes the address/value pairs ]

> > Is this a well defined mechanism supported by mainline uboot, barebox
> > etc. Or is it some Marvell extension to their uboot?
>
> As far as I know, it is a Marvell extension to their "binary header",
> so it's done even before U-Boot starts. Since the hardware needs
> assistance from the bootloader to do suspend/resume, there is
> necessarily a certain amount of cooperation/agreement needed by what
> the kernel does and what the bootloader expects. I'm not sure there's
> any "standard" mechanism here. Do you know of any?
>
> I know the suspend/resume on the Blackfin architecture works the same
> way (at least it used to work that way years ago when I did a bit of
> Blackfin stuff). And here as well, there was some cooperation between
> the kernel and the bootloader. See
> arch/blackfin/mach-common/dpmc_modes.S, function do_hibernate() at the
> end.
>

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Link: https://lkml.kernel.org/r/1416585613-2113-10-git-send-email-thomas.petazzoni@free-electrons.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
2014-11-30 16:40:12 +00:00
..
boot Merge tag 'qcom-dt-for-3.18-3' of git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom into fixes 2014-10-19 13:39:08 -07:00
common This is the bulk of GPIO changes for the v3.18 development 2014-10-09 14:58:15 -04:00
configs Samsung defconfig, actually exynos_defconig updates for v3.18 2014-10-14 23:32:31 -07:00
crypto
firmware
include Second batch of changes for KVM/{arm,arm64} for 3.18 2014-10-18 14:32:31 -07:00
kernel Merge git://git.infradead.org/users/eparis/audit 2014-10-19 16:25:56 -07:00
kvm Second batch of changes for KVM/{arm,arm64} for 3.18 2014-10-18 14:32:31 -07:00
lib ARM: 8137/1: fix get_user BE behavior for target variable with size of 8 bytes 2014-09-12 17:38:59 +01:00
mach-at91 Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-axxia
mach-bcm Merge tag 'bcm63138-v4' of http://github.com/brcm/linux into next/soc 2014-09-25 23:50:02 +02:00
mach-berlin
mach-clps711x ARM: SoC platform changes for 3.18 2014-10-08 17:13:04 -04:00
mach-cns3xxx CNS3xxx: Fix PCIe read size limit. 2014-09-25 23:35:01 +02:00
mach-davinci ARM: SoC DT updates for 3.18 2014-10-08 17:22:23 -04:00
mach-dove
mach-ebsa110 kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-efm32
mach-ep93xx kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-exynos Samsung fixes for v3.18 2014-10-14 23:31:13 -07:00
mach-footbridge kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-gemini
mach-highbank
mach-hisi ARM: hisi: depend on ARCH_MULTI_V7 2014-10-02 16:40:10 +02:00
mach-imx ACPI and power management updates for 3.18-rc1 2014-10-09 16:07:43 -04:00
mach-integrator PCI changes for the v3.18 merge window: 2014-10-09 15:03:49 -04:00
mach-iop13xx kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-iop32x kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-iop33x kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-ixp4xx
mach-keystone
mach-ks8695 kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-lpc32xx ARM: LPC32xx: Fix reset function 2014-09-10 17:25:14 +02:00
mach-mediatek
mach-meson ARM: meson: add basic support for MesonX SoCs 2014-09-25 17:34:42 +02:00
mach-mmp
mach-moxart
mach-msm
mach-mv78xx0
mach-mvebu ARM: mvebu: implement suspend/resume support for Armada XP 2014-11-30 16:40:12 +00:00
mach-mxs
mach-netx
mach-nomadik
mach-nspire
mach-omap1
mach-omap2 MTD updates for 3.18 2014-10-18 11:48:03 -07:00
mach-orion5x ARM: orion5x: Convert pr_warning to pr_warn 2014-09-13 21:29:21 +00:00
mach-picoxcell
mach-prima2
mach-pxa The clk tree changes for 3.18 are dominated by clock drivers. Mostly 2014-10-15 07:05:03 +02:00
mach-qcom
mach-realview
mach-rockchip
mach-rpc kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-s3c24xx Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-s3c64xx Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-s5pv210 Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-sa1100 Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
mach-shmobile Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2014-10-14 09:39:08 +02:00
mach-socfpga
mach-spear
mach-sti
mach-sunxi ARM: sunxi: Remove sun4i reboot code from mach directory 2014-09-11 21:01:47 +02:00
mach-tegra
mach-u300 kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
mach-ux500
mach-versatile
mach-vexpress
mach-vt8500 arm, vt8500, LLVMLlinux: Use mcr instead of mcr% for mach-vt8500 2014-09-26 01:49:03 +02:00
mach-w90x900
mach-zynq ACPI and power management updates for 3.18-rc1 2014-10-09 16:07:43 -04:00
mm Samsung fixes for v3.18 2014-10-14 23:31:13 -07:00
net net: bpf: arm: make hole-faulting more robust 2014-09-23 12:40:22 -04:00
nwfpe
oprofile
plat-iop kbuild: remove unnecessary variable initializaions 2014-10-02 13:55:02 +02:00
plat-omap Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
plat-orion dsa: Replace mii_bus with a generic host device 2014-09-15 17:24:20 -04:00
plat-pxa ARM: pxa: ssp: provide platform_device_id for PXA3xx 2014-09-19 01:56:02 +08:00
plat-samsung Samsung fixes for v3.18 2014-10-14 23:31:13 -07:00
plat-versatile
tools
vfp
xen xen/arm: remove mach_to_phys rbtree 2014-09-11 18:11:53 +00:00
Kconfig xen: features and fixes for 3.18-rc0 2014-10-11 20:29:01 -04:00
Kconfig-nommu
Kconfig.debug ARM: SoC platform changes for 3.18 2014-10-08 17:13:04 -04:00
Makefile Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00