public inbox for u-boot@lists.denx.de
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox