From: Anton Vorontsov <avorontsov@ru.mvista.com>
To: Kumar Gala <galak@kernel.crashing.org>
Cc: Scott Wood <scottwood@freescale.com>,
linuxppc-dev@ozlabs.org, Timur Tabi <timur@freescale.com>,
Jason Jin <Jason.jin@freescale.com>
Subject: Re: [PATCH 1/2] [POWERPC] 86xx: suspend support
Date: Fri, 6 Jun 2008 23:36:06 +0400 [thread overview]
Message-ID: <20080606193605.GA22197@polina.dev.rtsoft.ru> (raw)
In-Reply-To: <20080606192443.GA20132@polina.dev.rtsoft.ru>
Ugh...
This should be From: Jason Jin <Jason.jin@freescale.com>, since
I've made only few small cleanups, the code itself is almost intact.
On Fri, Jun 06, 2008 at 11:24:43PM +0400, Anton Vorontsov wrote:
> This patch adds suspend (standby, not suspend-to-ram) support for MPC86xx
> processors.
>
> In standby mode MPC86xx is able to wakeup only upon external interrupts
> (including sreset).
>
> Signed-off-by: Scott Wood <scottwood@freescale.com>
> Signed-off-by: Jason Jin <Jason.jin@freescale.com>
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
> arch/powerpc/Kconfig | 2 +-
> arch/powerpc/platforms/86xx/Makefile | 1 +
> arch/powerpc/platforms/86xx/mpc86xx_suspend.c | 92 +++++++++++++++++++++++++
> 3 files changed, 94 insertions(+), 1 deletions(-)
> create mode 100644 arch/powerpc/platforms/86xx/mpc86xx_suspend.c
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index 2cde4e3..c45c71e 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -192,7 +192,7 @@ config ARCH_HIBERNATION_POSSIBLE
>
> config ARCH_SUSPEND_POSSIBLE
> def_bool y
> - depends on ADB_PMU || PPC_EFIKA || PPC_LITE5200
> + depends on ADB_PMU || PPC_EFIKA || PPC_LITE5200 || PPC_86xx
>
> config PPC_DCR_NATIVE
> bool
> diff --git a/arch/powerpc/platforms/86xx/Makefile b/arch/powerpc/platforms/86xx/Makefile
> index 1b9b4a9..a8557df 100644
> --- a/arch/powerpc/platforms/86xx/Makefile
> +++ b/arch/powerpc/platforms/86xx/Makefile
> @@ -3,6 +3,7 @@
> #
>
> obj-$(CONFIG_SMP) += mpc86xx_smp.o
> +obj-$(CONFIG_SUSPEND) += mpc86xx_suspend.o
> obj-$(CONFIG_MPC8641_HPCN) += mpc86xx_hpcn.o
> obj-$(CONFIG_SBC8641D) += sbc8641d.o
> obj-$(CONFIG_MPC8610_HPCD) += mpc8610_hpcd.o
> diff --git a/arch/powerpc/platforms/86xx/mpc86xx_suspend.c b/arch/powerpc/platforms/86xx/mpc86xx_suspend.c
> new file mode 100644
> index 0000000..ce13e4c
> --- /dev/null
> +++ b/arch/powerpc/platforms/86xx/mpc86xx_suspend.c
> @@ -0,0 +1,92 @@
> +/*
> + * MPC86xx suspend (standby) support
> + *
> + * Copyright (C) 2008 Freescale Semiconductor, Inc. All rights reserved.
> + *
> + * Author: Jason Jin <jason.jin@freescale.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 as published
> + * by the Free Software Foundation.
> + */
> +
> +#include <linux/init.h>
> +#include <linux/types.h>
> +#include <linux/suspend.h>
> +#include <linux/of.h>
> +#include <linux/io.h>
> +#include <asm/prom.h>
> +#include <asm/reg.h>
> +#include <asm/mpc6xx.h>
> +
> +#define PMCSR_DEVSLEEP 0x00020000
> +
> +struct mpc86xx_pmc {
> + __be32 devdisr;
> + __be32 devdisr2;
> + __be32 reserve1;
> + __be32 reserve2;
> + __be32 powmgtcsr;
> +};
> +
> +static struct mpc86xx_pmc __iomem *pmc_regs_86xx;
> +
> +static int mpc86xx_suspend_enter(suspend_state_t state)
> +{
> + u32 tmp;
> +
> + /* Disable power management. */
> + tmp = mfmsr();
> + mtmsr(tmp & ~MSR_POW);
> +
> + /* Enable sleep mode, disable others. */
> + tmp = mfspr(SPRN_HID0);
> + mtspr(SPRN_HID0, (tmp & ~(HID0_DOZE | HID0_NAP)) | HID0_SLEEP);
> + asm("sync");
> +
> + /* Device power down. */
> + setbits32(&pmc_regs_86xx->powmgtcsr, PMCSR_DEVSLEEP);
> +
> + /* 86xx did not support deep sleep, let it enter standby mode. */
> + mpc6xx_enter_standby();
> +
> + clrbits32(&pmc_regs_86xx->powmgtcsr, PMCSR_DEVSLEEP);
> +
> + return 0;
> +}
> +
> +static int mpc86xx_suspend_valid(suspend_state_t state)
> +{
> + if (state == PM_SUSPEND_STANDBY)
> + return 1;
> + return 0;
> +}
> +
> +static struct platform_suspend_ops mpc86xx_suspend_ops = {
> + .valid = mpc86xx_suspend_valid,
> + .enter = mpc86xx_suspend_enter,
> +};
> +
> +static int __init mpc86xx_pmc_init(void)
> +{
> + void __iomem *guts;
> + struct device_node *np;
> +
> + np = of_find_compatible_node(NULL, NULL, "fsl,mpc8610-guts");
> + if (!np) {
> + np = of_find_compatible_node(NULL, NULL, "fsl,mpc8641-guts");
> + if (!np)
> + return -ENODEV;
> + }
> +
> + guts = of_iomap(np, 0);
> + of_node_put(np);
> + if (!guts)
> + return -ENOMEM;
> +
> + pmc_regs_86xx = guts + 0x70;
> +
> + suspend_set_ops(&mpc86xx_suspend_ops);
> + return 0;
> +}
> +module_init(mpc86xx_pmc_init);
> --
> 1.5.5.1
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
next prev parent reply other threads:[~2008-06-06 19:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-06 19:24 [PATCH 1/2] [POWERPC] 86xx: suspend support Anton Vorontsov
2008-06-06 19:36 ` Anton Vorontsov [this message]
2008-07-15 16:16 ` Kumar Gala
2008-07-15 16:49 ` Anton Vorontsov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080606193605.GA22197@polina.dev.rtsoft.ru \
--to=avorontsov@ru.mvista.com \
--cc=Jason.jin@freescale.com \
--cc=galak@kernel.crashing.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=scottwood@freescale.com \
--cc=timur@freescale.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.