All of lore.kernel.org
 help / color / mirror / Atom feed
From: Scott Wood <oss@buserror.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 8/9] ARM: ARMv7: PSCI: ls102xa: add psci functions implemention
Date: Mon, 18 Jan 2016 16:52:58 -0600	[thread overview]
Message-ID: <1453157578.19133.64.camel@buserror.net> (raw)
In-Reply-To: <1453091251-17433-9-git-send-email-dongsheng.wang@nxp.com>

On Mon, 2016-01-18 at 12:27 +0800, Dongsheng Wang wrote:
> From: Wang Dongsheng <dongsheng.wang@nxp.com>
> 
> Based on PSCI v1.0, implement interface for ls102xa SoC:
> psci_version,
> psci_features,
> psci_cpu_suspend,
> psci_affinity_info,
> psci_system_reset,
> psci_system_off.
> 
> Tested on LS1021aQDS, LS1021aTWR.
> 
> Signed-off-by: Wang Dongsheng <dongsheng.wang@nxp.com>
> ---
>  arch/arm/cpu/armv7/ls102xa/psci.S          | 110
> +++++++++++++++++++++++++++--
>  arch/arm/include/asm/arch-ls102xa/config.h |   1 +
>  board/freescale/ls1021aqds/Makefile        |   1 +
>  board/freescale/ls1021aqds/psci.S          |  36 ++++++++++
>  board/freescale/ls1021atwr/Makefile        |   1 +
>  board/freescale/ls1021atwr/psci.S          |  28 ++++++++
>  include/configs/ls1021aqds.h               |   3 +
>  include/configs/ls1021atwr.h               |   1 +
>  8 files changed, 177 insertions(+), 4 deletions(-)
>  create mode 100644 board/freescale/ls1021aqds/psci.S
>  create mode 100644 board/freescale/ls1021atwr/psci.S
> 
> diff --git a/arch/arm/cpu/armv7/ls102xa/psci.S
> b/arch/arm/cpu/armv7/ls102xa/psci.S
> index 3091362..bfc908e 100644
> --- a/arch/arm/cpu/armv7/ls102xa/psci.S
> +++ b/arch/arm/cpu/armv7/ls102xa/psci.S
> @@ -12,19 +12,72 @@
>  #include <asm/arch-armv7/generictimer.h>
>  #include <asm/psci.h>
>  
> +#define RCPM_TWAITSR		0x04C
> +
>  #define SCFG_CORE0_SFT_RST      0x130
>  #define SCFG_CORESRENCR         0x204
>  
> -#define DCFG_CCSR_BRR           0x0E4
> -#define DCFG_CCSR_SCRATCHRW1    0x200
> +#define DCFG_CCSR_RSTCR			0x0B0
> +#define DCFG_CCSR_RSTCR_RESET_REQ	0x2
> +#define DCFG_CCSR_BRR			0x0E4
> +#define DCFG_CCSR_SCRATCHRW1		0x200
> +
> +#define PSCI_FN_PSCI_VERSION_FEATURE_MASK	0x0
> +#define PSCI_FN_CPU_SUSPEND_FEATURE_MASK	0x0
> +#define PSCI_FN_CPU_OFF_FEATURE_MASK		0x0
> +#define PSCI_FN_CPU_ON_FEATURE_MASK		0x0
> +#define PSCI_FN_AFFINITY_INFO_FEATURE_MASK	0x0
> +#define PSCI_FN_SYSTEM_OFF_FEATURE_MASK		0x0
> +#define PSCI_FN_SYSTEM_RESET_FEATURE_MASK	0x0
>  
>  	.pushsection ._secure.text, "ax"
>  
>  	.arch_extension sec
>  
> +	.align	5
> +
>  #define	ONE_MS		(GENERIC_TIMER_CLK / 1000)
>  #define	RESET_WAIT	(30 * ONE_MS)
>  
> +.globl	psci_version
> +psci_version:
> +	movw	r0, #0
> +	movt	r0, #1
> +
> +	bx	lr
> +
> +_ls102x_psci_supported_table:
> +	.word	PSCI_FN_PSCI_VERSION
> +	.word	PSCI_FN_PSCI_VERSION_FEATURE_MASK
> +	.word	PSCI_FN_CPU_SUSPEND
> +	.word	PSCI_FN_CPU_SUSPEND_FEATURE_MASK
> +	.word	PSCI_FN_CPU_OFF
> +	.word	PSCI_FN_CPU_OFF_FEATURE_MASK
> +	.word	PSCI_FN_CPU_ON
> +	.word	PSCI_FN_CPU_ON_FEATURE_MASK
> +	.word	PSCI_FN_AFFINITY_INFO
> +	.word	PSCI_FN_AFFINITY_INFO_FEATURE_MASK
> +	.word	PSCI_FN_SYSTEM_OFF
> +	.word	PSCI_FN_SYSTEM_OFF_FEATURE_MASK
> +	.word	PSCI_FN_SYSTEM_RESET
> +	.word	PSCI_FN_SYSTEM_RESET_FEATURE_MASK
> +	.word	0
> +	.word	PSCI_RET_NOT_SUPPORTED

Can you use the main _psci_table instead of duplicating it?

> +
> +.globl	psci_features
> +psci_features:
> +	adr	r2, _ls102x_psci_supported_table
> +1:	ldr	r3, [r2]
> +	cmp	r3, #0
> +	beq	out_psci_features
> +	cmp	r1, r3
> +	addne	r2, r2, #8
> +	bne	1b

Why are you adding 8 here?

> +
> +out_psci_features:
> +	ldr	r0, [r2, #4]
> +	bx	lr

If you find a match, you're supposed to return zero, not the next function id
in the table.

How did you test this?  There should really be a test suite for runtime
services such as this, especially when trying to comply with a standard.



> +
>  #define AFFINITY_LEVEL_PROCESSOR_SHIFT		8
>  @ Expect target CPU in r1, return the target cpu number in R0
>  .globl	psci_get_target_cpu_id
> @@ -128,6 +181,57 @@ psci_cpu_off:
>  1:	wfi
>  	b	1b
>  
> +.globl	psci_cpu_suspend
> +psci_cpu_suspend:
> +	mov	r0, #PSCI_RET_INVALID_PARAMS
> +	bx	lr
> +
> +.globl	psci_affinity_info
> +psci_affinity_info:
> +	push	{lr}
> +
> +	mov	r0, #PSCI_RET_INVALID_PARAMS
> +
> +	@ Verify Affinity level
> +	cmp	r2, #0
> +	bne	out_affinity_info
> +
> +	bl	psci_get_target_cpu_id
> +	cmp	r0, #PSCI_RET_INVALID_PARAMS
> +	beq	out_affinity_info
> +	mov	r1, r0
> +
> +	@ Get RCPM base address
> +	movw	r4, #(CONFIG_SYS_FSL_RCPM_ADDR & 0xffff)
> +	movt	r4, #(CONFIG_SYS_FSL_RCPM_ADDR >> 16)
> +
> +	mov	r0, #PSCI_AFFINITY_LEVEL_ON
> +
> +	@ Detect target CPU state
> +	ldr	r2, [r4, #RCPM_TWAITSR]
> +	rev	r2, r2
> +	lsr	r2, r2, r1
> +	ands	r2, r2, #1
> +	beq	out_affinity_info
> +
> +	mov	r0, #PSCI_AFFINITY_LEVEL_OFF
> +
> +out_affinity_info:
> +	pop	{pc}

Where do you check for ON_PENDING?

-Scott

  reply	other threads:[~2016-01-18 22:52 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-18  4:27 [U-Boot] [PATCH 0/9] ARM: ARMv7: PSCI: add PSCI v1.0 support Dongsheng Wang
2016-01-18  4:27 ` [U-Boot] [PATCH 1/9] ARM: PSCI: Change function ID base value Dongsheng Wang
2016-01-18  4:27 ` [U-Boot] [PATCH 2/9] ARM: PSCI: Change PSCI related macro definition style Dongsheng Wang
2016-01-18  4:27 ` [U-Boot] [PATCH 3/9] ARM: ARMv7: PSCI: move target PC in each CPU stack no longer is shared Dongsheng Wang
2016-03-16  7:04   ` Chenhui Zhao
2016-03-16  8:29     ` Hongbo Zhang
     [not found]     ` <DB3PR04MB0812BFF5181A4DDE5FE8267A848A0@DB3PR04MB0812.eurprd04.prod.outlook.com>
2016-03-16  8:29       ` Wang Dongsheng
2016-01-18  4:27 ` [U-Boot] [PATCH 4/9] ARM: ARMv7: PSCI: Factor out reusable psci_cpu_on_common Dongsheng Wang
2016-01-18  4:27 ` [U-Boot] [PATCH 5/9] ARM: ARMv7: PSCI: Pass contextID to target CPU Dongsheng Wang
2016-01-18  4:27 ` [U-Boot] [PATCH 6/9] ARM: ARMv7: PSCI: ls102xa: Verify CPU ID for CPU_ON Dongsheng Wang
2016-01-18 23:01   ` Scott Wood
2016-01-19  6:31     ` Dongsheng Wang
2016-01-18  4:27 ` [U-Boot] [PATCH 7/9] ARM: ARMv7: PSCI: Add PSCI 1.0 version support Dongsheng Wang
2016-01-18 22:30   ` Scott Wood
2016-01-19  5:52     ` Dongsheng Wang
2016-01-18  4:27 ` [U-Boot] [PATCH 8/9] ARM: ARMv7: PSCI: ls102xa: add psci functions implemention Dongsheng Wang
2016-01-18 22:52   ` Scott Wood [this message]
2016-01-19  6:28     ` Dongsheng Wang
2016-01-21 22:56       ` Scott Wood
2016-01-22  2:46         ` Dongsheng Wang
2016-03-03  3:54         ` Dongsheng Wang
2016-01-18  4:27 ` [U-Boot] [PATCH 9/9] ARM: ARMv7: PSCI: ls102xa: put secure text section into OCRAM Dongsheng Wang
2016-03-03  3:51 ` [U-Boot] [PATCH 0/9] ARM: ARMv7: PSCI: add PSCI v1.0 support Dongsheng Wang

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=1453157578.19133.64.camel@buserror.net \
    --to=oss@buserror.net \
    --cc=u-boot@lists.denx.de \
    /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.