[PATCH v3] powerpc/rcpm: add RCPM driver

Yuantian Tang Yuantian.Tang at freescale.com
Wed Jun 17 13:48:23 AEST 2015


Please see my replay inline.

Thanks,
Yuantian


> -----Original Message-----
> From: Bob Cochran [mailto:ppc at mindchasers.com]
> Sent: Wednesday, June 17, 2015 2:00 AM
> To: Tang Yuantian-B29983; Wood Scott-B07421
> Cc: linuxppc-dev at lists.ozlabs.org; Zhao Chenhui-B35336
> Subject: Re: [PATCH v3] powerpc/rcpm: add RCPM driver
> 
> On 06/16/2015 05:26 AM, Yuantian.Tang at freescale.com wrote:
> > From: Tang Yuantian <Yuantian.Tang at freescale.com>
> >
> > There is a RCPM (Run Control/Power Management) in Freescale QorIQ
> > series processors. The device performs tasks associated with device
> > run control and power management.
> >
> > The driver implements some features: mask/unmask irq, enter/exit low
> > power states, freeze time base, etc.
> >
> > Signed-off-by: Chenhui Zhao <chenhui.zhao at freescale.com>
> > Signed-off-by: Tang Yuantian <Yuantian.Tang at freescale.com>
> > ---
> > v3:
> > 	- added static and __init modifier to fsl_rcpm_init
> > v2:
> > 	- fix code style issues
> > 	- refine compatible string match part
> >
> >   Documentation/devicetree/bindings/soc/fsl/rcpm.txt |  22 ++
> >   arch/powerpc/include/asm/fsl_guts.h                | 105 +++++++
> >   arch/powerpc/include/asm/fsl_pm.h                  |  48 +++
> >   arch/powerpc/platforms/85xx/Kconfig                |   1 +
> >   arch/powerpc/sysdev/Kconfig                        |   5 +
> >   arch/powerpc/sysdev/Makefile                       |   1 +
> >   arch/powerpc/sysdev/fsl_rcpm.c                     | 338
> +++++++++++++++++++++
> >   7 files changed, 520 insertions(+)
> >   create mode 100644 Documentation/devicetree/bindings/soc/fsl/rcpm.txt
> >   create mode 100644 arch/powerpc/include/asm/fsl_pm.h
> >   create mode 100644 arch/powerpc/sysdev/fsl_rcpm.c
> >
> > diff --git a/Documentation/devicetree/bindings/soc/fsl/rcpm.txt
> > b/Documentation/devicetree/bindings/soc/fsl/rcpm.txt
> > new file mode 100644
> > index 0000000..5318999
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/soc/fsl/rcpm.txt
> > @@ -0,0 +1,22 @@
> > +* Run Control and Power Management
> > +
> > +The RCPM performs all device-level tasks associated with device run
> > +control and power management.
> > +
> > +Required properites:
> > +  - reg : Offset and length of the register set of RCPM block.
> > +  - compatible : Specifies the compatibility list for the RCPM. The
> type
> > +    should be string, such as "fsl,qoriq-rcpm-1.0", "fsl,qoriq-rcpm-
> 2.0".
> 
> 
> I just checked both my T1040 RM and datasheet, and I didn't see mention
> of the RCPM version that's used ( I assume it's 2.0 ). Is there a
> general rule for which SoCs have which version?  If so, perhaps you'll
> want to include it here along with your examples.
> 
No such rule exists. The only way you can get the RCPM version is to refer to the DTS.

> 
> 
> > +
> > +Example:
> > +The RCPM node for T4240:
> > +	rcpm: global-utilities at e2000 {
> > +		compatible = "fsl,t4240-rcpm", "fsl,qoriq-rcpm-2.0";
> > +		reg = <0xe2000 0x1000>;
> > +	};
> > +
> > +The RCPM node for P4080:
> > +	rcpm: global-utilities at e2000 {
> > +		compatible = "fsl,qoriq-rcpm-1.0";
> > +		reg = <0xe2000 0x1000>;
> > +	};
> 
> -- cut ---
> 
> > diff --git a/arch/powerpc/include/asm/fsl_pm.h
> > b/arch/powerpc/include/asm/fsl_pm.h
> > new file mode 100644
> > index 0000000..4b09f09
> > --- /dev/null
> > +++ b/arch/powerpc/include/asm/fsl_pm.h
> > @@ -0,0 +1,48 @@
> > +/*
> > + * Support Power Management
> > + *
> > + * Copyright 2014-2015 Freescale Semiconductor Inc.
> > + *
> > + * This program is free software; you can redistribute  it and/or
> > +modify it
> > + * under  the terms of  the GNU General  Public License as published
> > +by the
> > + * Free Software Foundation;  either version 2 of the  License, or
> > +(at your
> > + * option) any later version.
> > + */
> > +#ifndef __PPC_FSL_PM_H
> > +#define __PPC_FSL_PM_H
> > +#ifdef __KERNEL__
> > +
> > +#define E500_PM_PH10	1
> > +#define E500_PM_PH15	2
> > +#define E500_PM_PH20	3
> > +#define E500_PM_PH30	4
> > +#define E500_PM_DOZE	E500_PM_PH10
> > +#define E500_PM_NAP	E500_PM_PH15
> 
> 
> Are you using "E500" in your labels for historical reasons? I can use
> this driver with E5500 and E6500 cores, right?  However, maybe I'm
> mistaken since some of your states don't seem to map to my E5500 / T1040
> (e.g., my RCPM doesn't seem to support PH20 or PH30, but I do have LPM10
> and LPM35, which I don't think your driver supports).  My RM states that
> LPM35 is a newer PM state, so maybe this is future work to be done?
> 
These are all the PM states for E500 series socs. The states a board supports are from one to the other.
T1040 and some other platforms support LPM35 which will be implemented in future patch.

Regards,
Yuantian

> 
> > +
> > +#define PLAT_PM_SLEEP	20
> > +#define PLAT_PM_LPM20	30
> > +
> > +#define FSL_PM_SLEEP		(1 << 0)
> > +#define FSL_PM_DEEP_SLEEP	(1 << 1)
> 
> 
> I don't see where you use FSL_PM_DEEP_SLEEP, and I'm wondering if this
> was provisioned for LPM35, which is documented to be a deep sleep mode.
> 
> 
> > +
> > +struct fsl_pm_ops {
> > +	/* mask pending interrupts to the RCPM from MPIC */
> > +	void (*irq_mask)(int cpu);
> > +
> > +	/* unmask pending interrupts to the RCPM from MPIC */
> > +	void (*irq_unmask)(int cpu);
> > +	void (*cpu_enter_state)(int cpu, int state);
> > +	void (*cpu_exit_state)(int cpu, int state);
> > +	int (*plat_enter_sleep)(void);
> > +	void (*freeze_time_base)(bool freeze);
> > +
> > +	/* keep the power of IP blocks during sleep/deep sleep */
> > +	void (*set_ip_power)(bool enable, u32 *mask);
> > +
> > +	/* get platform supported power management modes */
> > +	unsigned int (*get_pm_modes)(void);
> > +};
> > +
> > +extern const struct fsl_pm_ops *qoriq_pm_ops;
> > +#endif /* __KERNEL__ */
> > +#endif /* __PPC_FSL_PM_H */
> 
> -- cut ---
> 



More information about the Linuxppc-dev mailing list