* [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB
@ 2009-12-10 17:59 Anton Vorontsov
2009-12-10 18:00 ` [PATCH 1/3] powerpc/83xx/suspend: Clear deep_sleeping after devices resume Anton Vorontsov
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Anton Vorontsov @ 2009-12-10 17:59 UTC (permalink / raw)
To: Kumar Gala; +Cc: Scott Wood, linuxppc-dev
Hi all,
This is quite late resend, sorry.
Only the third patch has changed, i.e. I got rid of sleep-nexus
stuff per Scott and Benjamin suggestions.
Thanks,
--
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] powerpc/83xx/suspend: Clear deep_sleeping after devices resume
2009-12-10 17:59 [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB Anton Vorontsov
@ 2009-12-10 18:00 ` Anton Vorontsov
2009-12-11 1:56 ` Kumar Gala
2009-12-10 18:00 ` [PATCH 2/3] powerpc/83xx/suspend: Save and restore SICRL, SICRH and SCCR Anton Vorontsov
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Anton Vorontsov @ 2009-12-10 18:00 UTC (permalink / raw)
To: Kumar Gala; +Cc: Scott Wood, linuxppc-dev
Currently 83xx PMC driver clears deep_sleeping variable very early,
before devices are resumed. This makes fsl_deep_sleep() unusable in
drivers' resume() callback.
Sure, drivers can store fsl_deep_sleep() value on suspend and use
the stored value on resume. But a better solution is to postpone
clearing the deep_sleeping variable, i.e. move it into finish()
callback.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Acked-by: Scott Wood <scottwood@freescale.com>
---
arch/powerpc/platforms/83xx/suspend.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/platforms/83xx/suspend.c b/arch/powerpc/platforms/83xx/suspend.c
index d306f07..b0c2619 100644
--- a/arch/powerpc/platforms/83xx/suspend.c
+++ b/arch/powerpc/platforms/83xx/suspend.c
@@ -194,7 +194,7 @@ out:
return ret;
}
-static void mpc83xx_suspend_finish(void)
+static void mpc83xx_suspend_end(void)
{
deep_sleeping = 0;
}
@@ -278,7 +278,7 @@ static struct platform_suspend_ops mpc83xx_suspend_ops = {
.valid = mpc83xx_suspend_valid,
.begin = mpc83xx_suspend_begin,
.enter = mpc83xx_suspend_enter,
- .finish = mpc83xx_suspend_finish,
+ .end = mpc83xx_suspend_end,
};
static int pmc_probe(struct of_device *ofdev,
--
1.6.3.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] powerpc/83xx/suspend: Save and restore SICRL, SICRH and SCCR
2009-12-10 17:59 [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB Anton Vorontsov
2009-12-10 18:00 ` [PATCH 1/3] powerpc/83xx/suspend: Clear deep_sleeping after devices resume Anton Vorontsov
@ 2009-12-10 18:00 ` Anton Vorontsov
2009-12-11 1:57 ` Kumar Gala
2009-12-10 18:01 ` [PATCH 3/3] powerpc/83xx: Add power management support for MPC8315E-RDB boards Anton Vorontsov
2009-12-10 18:07 ` [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB Scott Wood
3 siblings, 1 reply; 8+ messages in thread
From: Anton Vorontsov @ 2009-12-10 18:00 UTC (permalink / raw)
To: Kumar Gala; +Cc: Scott Wood, linuxppc-dev
We need to save SICRL, SICRH and SCCR registers on suspend, and restore
them on resume. Otherwise, we lose IO and clocks setup on MPC8315E-RDB
boards when ULPI USB PHY is used (non-POR setup).
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
arch/powerpc/platforms/83xx/suspend.c | 48 +++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/platforms/83xx/suspend.c b/arch/powerpc/platforms/83xx/suspend.c
index b0c2619..4380534 100644
--- a/arch/powerpc/platforms/83xx/suspend.c
+++ b/arch/powerpc/platforms/83xx/suspend.c
@@ -32,6 +32,7 @@
#define PMCCR1_NEXT_STATE 0x0C /* Next state for power management */
#define PMCCR1_NEXT_STATE_SHIFT 2
#define PMCCR1_CURR_STATE 0x03 /* Current state for power management*/
+#define IMMR_SYSCR_OFFSET 0x100
#define IMMR_RCW_OFFSET 0x900
#define RCW_PCI_HOST 0x80000000
@@ -78,6 +79,22 @@ struct mpc83xx_clock {
u32 sccr;
};
+struct mpc83xx_syscr {
+ __be32 sgprl;
+ __be32 sgprh;
+ __be32 spridr;
+ __be32 :32;
+ __be32 spcr;
+ __be32 sicrl;
+ __be32 sicrh;
+};
+
+struct mpc83xx_saved {
+ u32 sicrl;
+ u32 sicrh;
+ u32 sccr;
+};
+
struct pmc_type {
int has_deep_sleep;
};
@@ -87,6 +104,8 @@ static int has_deep_sleep, deep_sleeping;
static int pmc_irq;
static struct mpc83xx_pmc __iomem *pmc_regs;
static struct mpc83xx_clock __iomem *clock_regs;
+static struct mpc83xx_syscr __iomem *syscr_regs;
+static struct mpc83xx_saved saved_regs;
static int is_pci_agent, wake_from_pci;
static phys_addr_t immrbase;
static int pci_pm_state;
@@ -137,6 +156,20 @@ static irqreturn_t pmc_irq_handler(int irq, void *dev_id)
return ret;
}
+static void mpc83xx_suspend_restore_regs(void)
+{
+ out_be32(&syscr_regs->sicrl, saved_regs.sicrl);
+ out_be32(&syscr_regs->sicrh, saved_regs.sicrh);
+ out_be32(&clock_regs->sccr, saved_regs.sccr);
+}
+
+static void mpc83xx_suspend_save_regs(void)
+{
+ saved_regs.sicrl = in_be32(&syscr_regs->sicrl);
+ saved_regs.sicrh = in_be32(&syscr_regs->sicrh);
+ saved_regs.sccr = in_be32(&clock_regs->sccr);
+}
+
static int mpc83xx_suspend_enter(suspend_state_t state)
{
int ret = -EAGAIN;
@@ -166,6 +199,8 @@ static int mpc83xx_suspend_enter(suspend_state_t state)
*/
if (deep_sleeping) {
+ mpc83xx_suspend_save_regs();
+
out_be32(&pmc_regs->mask, PMCER_ALL);
out_be32(&pmc_regs->config1,
@@ -179,6 +214,8 @@ static int mpc83xx_suspend_enter(suspend_state_t state)
in_be32(&pmc_regs->config1) & ~PMCCR1_POWER_OFF);
out_be32(&pmc_regs->mask, PMCER_PMCI);
+
+ mpc83xx_suspend_restore_regs();
} else {
out_be32(&pmc_regs->mask, PMCER_PMCI);
@@ -333,12 +370,23 @@ static int pmc_probe(struct of_device *ofdev,
goto out_pmc;
}
+ if (has_deep_sleep) {
+ syscr_regs = ioremap(immrbase + IMMR_SYSCR_OFFSET,
+ sizeof(*syscr_regs));
+ if (!syscr_regs) {
+ ret = -ENOMEM;
+ goto out_syscr;
+ }
+ }
+
if (is_pci_agent)
mpc83xx_set_agent();
suspend_set_ops(&mpc83xx_suspend_ops);
return 0;
+out_syscr:
+ iounmap(clock_regs);
out_pmc:
iounmap(pmc_regs);
out:
--
1.6.3.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] powerpc/83xx: Add power management support for MPC8315E-RDB boards
2009-12-10 17:59 [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB Anton Vorontsov
2009-12-10 18:00 ` [PATCH 1/3] powerpc/83xx/suspend: Clear deep_sleeping after devices resume Anton Vorontsov
2009-12-10 18:00 ` [PATCH 2/3] powerpc/83xx/suspend: Save and restore SICRL, SICRH and SCCR Anton Vorontsov
@ 2009-12-10 18:01 ` Anton Vorontsov
2009-12-11 1:57 ` Kumar Gala
2009-12-10 18:07 ` [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB Scott Wood
3 siblings, 1 reply; 8+ messages in thread
From: Anton Vorontsov @ 2009-12-10 18:01 UTC (permalink / raw)
To: Kumar Gala; +Cc: Scott Wood, linuxppc-dev
- Add nodes for PMC and GTM controllers. GTM4 can be used as a wakeup
source;
- Add fsl,magic-packet properties to eTSEC nodes, i.e. wake-on-lan
support. Unlike MPC8313 processors, MPC8315 can resume from deep
sleep upon magic packet reception.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
arch/powerpc/boot/dts/mpc8315erdb.dts | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/boot/dts/mpc8315erdb.dts b/arch/powerpc/boot/dts/mpc8315erdb.dts
index 32e10f5..8a3a4f3 100644
--- a/arch/powerpc/boot/dts/mpc8315erdb.dts
+++ b/arch/powerpc/boot/dts/mpc8315erdb.dts
@@ -204,6 +204,7 @@
interrupt-parent = <&ipic>;
tbi-handle = <&tbi0>;
phy-handle = < &phy0 >;
+ fsl,magic-packet;
mdio@520 {
#address-cells = <1>;
@@ -246,6 +247,7 @@
interrupt-parent = <&ipic>;
tbi-handle = <&tbi1>;
phy-handle = < &phy1 >;
+ fsl,magic-packet;
mdio@520 {
#address-cells = <1>;
@@ -309,6 +311,22 @@
interrupt-parent = <&ipic>;
};
+ gtm1: timer@500 {
+ compatible = "fsl,mpc8315-gtm", "fsl,gtm";
+ reg = <0x500 0x100>;
+ interrupts = <90 8 78 8 84 8 72 8>;
+ interrupt-parent = <&ipic>;
+ clock-frequency = <133333333>;
+ };
+
+ timer@600 {
+ compatible = "fsl,mpc8315-gtm", "fsl,gtm";
+ reg = <0x600 0x100>;
+ interrupts = <91 8 79 8 85 8 73 8>;
+ interrupt-parent = <&ipic>;
+ clock-frequency = <133333333>;
+ };
+
/* IPIC
* interrupts cell = <intr #, sense>
* sense values match linux IORESOURCE_IRQ_* defines:
@@ -337,6 +355,15 @@
0x59 0x8>;
interrupt-parent = < &ipic >;
};
+
+ pmc: power@b00 {
+ compatible = "fsl,mpc8315-pmc", "fsl,mpc8313-pmc",
+ "fsl,mpc8349-pmc";
+ reg = <0xb00 0x100 0xa00 0x100>;
+ interrupts = <80 8>;
+ interrupt-parent = <&ipic>;
+ fsl,mpc8313-wakeup-timer = <>m1>;
+ };
};
pci0: pci@e0008500 {
--
1.6.3.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB
2009-12-10 17:59 [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB Anton Vorontsov
` (2 preceding siblings ...)
2009-12-10 18:01 ` [PATCH 3/3] powerpc/83xx: Add power management support for MPC8315E-RDB boards Anton Vorontsov
@ 2009-12-10 18:07 ` Scott Wood
3 siblings, 0 replies; 8+ messages in thread
From: Scott Wood @ 2009-12-10 18:07 UTC (permalink / raw)
To: avorontsov; +Cc: linuxppc-dev
Anton Vorontsov wrote:
> Hi all,
>
> This is quite late resend, sorry.
>
> Only the third patch has changed, i.e. I got rid of sleep-nexus
> stuff per Scott and Benjamin suggestions.
Acked-by: Scott Wood <scottwood@freescale.com>
-Scott
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] powerpc/83xx/suspend: Clear deep_sleeping after devices resume
2009-12-10 18:00 ` [PATCH 1/3] powerpc/83xx/suspend: Clear deep_sleeping after devices resume Anton Vorontsov
@ 2009-12-11 1:56 ` Kumar Gala
0 siblings, 0 replies; 8+ messages in thread
From: Kumar Gala @ 2009-12-11 1:56 UTC (permalink / raw)
To: Anton Vorontsov; +Cc: Scott Wood, linuxppc-dev
On Dec 10, 2009, at 12:00 PM, Anton Vorontsov wrote:
> Currently 83xx PMC driver clears deep_sleeping variable very early,
> before devices are resumed. This makes fsl_deep_sleep() unusable in
> drivers' resume() callback.
>
> Sure, drivers can store fsl_deep_sleep() value on suspend and use
> the stored value on resume. But a better solution is to postpone
> clearing the deep_sleeping variable, i.e. move it into finish()
> callback.
>
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> Acked-by: Scott Wood <scottwood@freescale.com>
> ---
> arch/powerpc/platforms/83xx/suspend.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
applied to next
- k
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] powerpc/83xx/suspend: Save and restore SICRL, SICRH and SCCR
2009-12-10 18:00 ` [PATCH 2/3] powerpc/83xx/suspend: Save and restore SICRL, SICRH and SCCR Anton Vorontsov
@ 2009-12-11 1:57 ` Kumar Gala
0 siblings, 0 replies; 8+ messages in thread
From: Kumar Gala @ 2009-12-11 1:57 UTC (permalink / raw)
To: Anton Vorontsov; +Cc: Scott Wood, linuxppc-dev
On Dec 10, 2009, at 12:00 PM, Anton Vorontsov wrote:
> We need to save SICRL, SICRH and SCCR registers on suspend, and =
restore
> them on resume. Otherwise, we lose IO and clocks setup on MPC8315E-RDB
> boards when ULPI USB PHY is used (non-POR setup).
>=20
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
> arch/powerpc/platforms/83xx/suspend.c | 48 =
+++++++++++++++++++++++++++++++++
> 1 files changed, 48 insertions(+), 0 deletions(-)
applied to next
- k=
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] powerpc/83xx: Add power management support for MPC8315E-RDB boards
2009-12-10 18:01 ` [PATCH 3/3] powerpc/83xx: Add power management support for MPC8315E-RDB boards Anton Vorontsov
@ 2009-12-11 1:57 ` Kumar Gala
0 siblings, 0 replies; 8+ messages in thread
From: Kumar Gala @ 2009-12-11 1:57 UTC (permalink / raw)
To: Anton Vorontsov; +Cc: Scott Wood, linuxppc-dev
On Dec 10, 2009, at 12:01 PM, Anton Vorontsov wrote:
> - Add nodes for PMC and GTM controllers. GTM4 can be used as a wakeup
> source;
>
> - Add fsl,magic-packet properties to eTSEC nodes, i.e. wake-on-lan
> support. Unlike MPC8313 processors, MPC8315 can resume from deep
> sleep upon magic packet reception.
>
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
> arch/powerpc/boot/dts/mpc8315erdb.dts | 27 +++++++++++++++++++++++++++
> 1 files changed, 27 insertions(+), 0 deletions(-)
applied to next
- k
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-12-11 1:57 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-10 17:59 [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB Anton Vorontsov
2009-12-10 18:00 ` [PATCH 1/3] powerpc/83xx/suspend: Clear deep_sleeping after devices resume Anton Vorontsov
2009-12-11 1:56 ` Kumar Gala
2009-12-10 18:00 ` [PATCH 2/3] powerpc/83xx/suspend: Save and restore SICRL, SICRH and SCCR Anton Vorontsov
2009-12-11 1:57 ` Kumar Gala
2009-12-10 18:01 ` [PATCH 3/3] powerpc/83xx: Add power management support for MPC8315E-RDB boards Anton Vorontsov
2009-12-11 1:57 ` Kumar Gala
2009-12-10 18:07 ` [PATCH v2 0/3] powerpc/83xx: Sleep and deep sleep support for MPC8315E-RDB Scott Wood
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).