From: Scott Wood <scottwood@freescale.com>
To: Zhao Chenhui <chenhui.zhao@freescale.com>
Cc: <linuxppc-dev@lists.ozlabs.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 07/15] powerpc/85xx: add time base sync for SoCs based on e500mc/e5500
Date: Tue, 23 Apr 2013 18:58:55 -0500 [thread overview]
Message-ID: <1366761535.5825.19@snotra> (raw)
In-Reply-To: <1366368468-29143-7-git-send-email-chenhui.zhao@freescale.com> (from chenhui.zhao@freescale.com on Fri Apr 19 05:47:40 2013)
On 04/19/2013 05:47:40 AM, Zhao Chenhui wrote:
> From: Chen-Hui Zhao <chenhui.zhao@freescale.com>
>
> In the case of SMP, during the time base sync period, all time bases
> of
> online cores must stop, then start simultaneously.
>
> There is a RCPM (Run Control/Power Management) module in CoreNet
> based SoCs.
> Define a struct ccsr_rcpm to describe the register map.
>
> This patch supports SoCs based on e500mc/e5500, such as P4080, P5020,
> etc.
>
> Signed-off-by: Zhao Chenhui <chenhui.zhao@freescale.com>
> Signed-off-by: Li Yang <leoli@freescale.com>
> ---
> arch/powerpc/include/asm/fsl_guts.h | 38
> +++++++++++++++++++++++++++++++++++
> arch/powerpc/platforms/85xx/smp.c | 32
> +++++++++++++++++++++++++++++
> 2 files changed, 70 insertions(+), 0 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/fsl_guts.h
> b/arch/powerpc/include/asm/fsl_guts.h
> index 77ced0b..4eac1cf 100644
> --- a/arch/powerpc/include/asm/fsl_guts.h
> +++ b/arch/powerpc/include/asm/fsl_guts.h
> @@ -106,6 +106,44 @@ struct ccsr_guts {
> /* Alternate function signal multiplex control */
> #define MPC85xx_PMUXCR_QE(x) (0x8000 >> (x))
>
> +struct ccsr_rcpm {
> + u8 res0000[4];
> + __be32 cdozsr; /* 0x0004 - Core Doze Status Register */
> + u8 res0008[4];
> + __be32 cdozcr; /* 0x000c - Core Doze Control Register
> */
> + u8 res0010[4];
> + __be32 cnapsr; /* 0x0014 - Core Nap Status Register */
> + u8 res0018[4];
> + __be32 cnapcr; /* 0x001c - Core Nap Control Register */
> + u8 res0020[4];
> + __be32 cdozpsr; /* 0x0024 - Core Doze Previous Status
> Register */
> + u8 res0028[4];
> + __be32 cnappsr; /* 0x002c - Core Nap Previous Status
> Register */
> + u8 res0030[4];
> + __be32 cwaitsr; /* 0x0034 - Core Wait Status Register */
> + u8 res0038[4];
> + __be32 cwdtdsr; /* 0x003c - Core watchdog detect status
> register */
> + __be32 powmgtcsr; /* 0x0040 - Power Mangement Control &
> Status Register */
> + u8 res0044[12];
> + __be32 ippdexpcr; /* 0x0050 - IP Powerdown Exception
> Control Register */
> + u8 res0054[16];
> + __be32 cpmimr; /* 0x0064 - Core PM IRQ Mask Register */
> + u8 res0068[4];
> + __be32 cpmcimr; /* 0x006c - Core PM Critical IRQ Mask
> Register */
> + u8 res0070[4];
> + __be32 cpmmcmr; /* 0x0074 - Core PM Machine Check Mask
> Register */
> + u8 res0078[4];
> + __be32 cpmnmimr; /* 0x007c - Core PM NMI Mask Register */
> + u8 res0080[4];
> + __be32 ctbenr; /* 0x0084 - Core Time Base Enable
> Register */
> + u8 res0088[4];
> + __be32 ctbckselr; /* 0x008c - Core Time Base Clock Select
> Register */
> + u8 res0090[4];
> + __be32 ctbhltcr; /* 0x0094 - Core Time Base Halt Control
> Register */
> + u8 res0098[4];
> + __be32 cmcpmaskcr; /* 0x00a4 - Core machine check mask
> control register */
> +};
> +
> #ifdef CONFIG_PPC_86xx
>
> #define CCSR_GUTS_DMACR_DEV_SSI 0 /* DMA
> controller/channel set to SSI */
> diff --git a/arch/powerpc/platforms/85xx/smp.c
> b/arch/powerpc/platforms/85xx/smp.c
> index 6a17599..6c2fe6b 100644
> --- a/arch/powerpc/platforms/85xx/smp.c
> +++ b/arch/powerpc/platforms/85xx/smp.c
> @@ -44,7 +44,36 @@ static struct ccsr_guts __iomem *guts;
> static u64 timebase;
> static int tb_req;
> static int tb_valid;
> +static u32 cur_booting_core;
>
> +#ifdef CONFIG_PPC_E500MC
> +/* get a physical mask of online cores and booting core */
> +static inline u32 get_phy_cpu_mask(void)
> +{
> + u32 mask;
> + int cpu;
> +
> + mask = 1 << cur_booting_core;
> + for_each_online_cpu(cpu)
> + mask |= 1 << get_hard_smp_processor_id(cpu);
> +
> + return mask;
> +}
> +
> +static void mpc85xx_timebase_freeze(int freeze)
> +{
> + struct ccsr_rcpm __iomem *rcpm = (typeof(rcpm))guts;
> + u32 mask = get_phy_cpu_mask();
> +
> + if (freeze)
> + clrbits32(&rcpm->ctbenr, mask);
> + else
> + setbits32(&rcpm->ctbenr, mask);
> +
> + /* read back to push the previos write */
> + in_be32(&rcpm->ctbenr);
> +}
> +#else
Please determine the timebase sync implementation at runtime, rather
than relying on our current inability to have e500v2 and e500mc in the
same kernel. e6500 will be different from e5500, but both can be in
the same kernel image.
-Scott
next prev parent reply other threads:[~2013-04-23 23:59 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-19 10:47 [PATCH v2 01/15] powerpc/85xx: cache operations for Freescale SoCs based on BOOK3E Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 02/15] powerpc/85xx: add sleep and deep sleep support Zhao Chenhui
2013-04-23 23:53 ` Scott Wood
2013-04-28 10:20 ` Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 03/15] fsl_pmc: Add API to enable device as wakeup event source Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 04/15] pm: add power node to dts Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 05/15] fsl_pmc: update device bindings Zhao Chenhui
2013-06-03 22:43 ` Scott Wood
2013-04-19 10:47 ` [PATCH v2 06/15] powerpc/85xx: add support to JOG feature using cpufreq interface Zhao Chenhui
2013-04-22 3:25 ` Viresh Kumar
2013-04-22 10:56 ` Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 07/15] powerpc/85xx: add time base sync for SoCs based on e500mc/e5500 Zhao Chenhui
2013-04-23 23:58 ` Scott Wood [this message]
2013-04-19 10:47 ` [PATCH v2 08/15] powerpc/85xx: add cpu hotplug support for e500mc/e5500 Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 09/15] powerpc/rcpm: add sleep feature for SoCs using RCPM Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 10/15] powerpc/85xx: fix 64-bit support for cpu hotplug Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 11/15] powerpc/rcpm: add struct ccsr_rcpm_v2 Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 12/15] powerpc/85xx: add time base sync support for e6500 Zhao Chenhui
2013-04-24 0:04 ` Scott Wood
2013-04-24 11:29 ` Zhao Chenhui
2013-04-24 22:38 ` Scott Wood
2013-04-25 0:28 ` Zhao Chenhui
2013-04-26 0:07 ` Scott Wood
2013-04-28 9:56 ` Zhao Chenhui
2013-04-29 20:18 ` Scott Wood
2013-04-19 10:47 ` [PATCH v2 13/15] powerpc/85xx: add support for e6500 L1 cache operation Zhao Chenhui
2013-04-24 0:00 ` Scott Wood
2013-04-24 11:14 ` Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 14/15] powerpc/smp: add cpu hotplug support for e6500 Zhao Chenhui
2013-04-19 10:47 ` [PATCH v2 15/15] powerpc/rcpm: add sleep support for T4/B4 chips Zhao Chenhui
2013-04-23 9:53 ` [linuxppc-release] [PATCH v2 01/15] powerpc/85xx: cache operations for Freescale SoCs based on BOOK3E Zhao Chenhui
2013-04-23 23:46 ` Scott Wood
2013-04-24 11:08 ` Zhao Chenhui
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=1366761535.5825.19@snotra \
--to=scottwood@freescale.com \
--cc=chenhui.zhao@freescale.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox