[U-Boot] [PATCH 00/10] sunxi: PSCI implementation rewrite in C

Hongbo Zhang macro.wave.z at gmail.com
Tue May 24 08:37:49 CEST 2016


Yes, C code is better and even necessary for some cases.
Drawback of assemble language is that it is difficult not only for
developers but also for the reviewers and maintainers.
I am implementing our NXP/Freescale LS1 platform's system-suspend
function, it is written in C too, is is impossible without C for my
case.

On Mon, May 23, 2016 at 8:41 PM, Chen-Yu Tsai <wens at csie.org> wrote:
> Hi everyone,
>
> This series rewrites the Allwinner/sunxi PSCI implementation in C, to make
> it easier to maintain and extend for the currently unsupported multi-cluster
> SoCs. The SMP code in the BSP kernels are in C. Having the PSCI code in C
> as well will make it easier to work on.
>
> To be able to convert the platform bits to C, some common PSCI functions
> have to be fixed up according to the ARM calling conventions. Function
> declarations are also needed.
>
> This series is based on sunxi/next. Parts of it will likely conflict with
> the effort to support PSCI 1.0 on the Freescale LS102xA.
>
> Patch 1 fixes up psci_get_cpu_stack_top.
>
> Patch 2 fixes up the PSCI version of v7_flush_dcache_all.
>
> Patch 3 adds function declarations for some of the common PSCI functions.
>
> Patch 4 fixes issues with reserving memory for the secure section.
>
> Patch 5 unifies the CPUCFG_BASE macro names for various sunxi platforms.
>
> Patch 6 groups cpu core related controls together into one struct per core.
> This makes it straightforward to access the controls by the cpu index.
>
> Patch 7 adds a missing header to cpucfg.h
>
> Patch 8 adds some missing fields to cpucfg, which were used in the assembly
> code.
>
> Patch 9 adds the base address for the GIC.
>
> Patch 10 is the new PSCI implementation in C. Almost all of the code is
> converted, with the exception of initial setup of the stack.
>
>
> Regards
> ChenYu
>
>
> Chen-Yu Tsai (10):
>   ARM: PSCI: use only r0 and r3 in psci_get_cpu_stack_top()
>   ARM: PSCI: save and restore clobbered registers in v7_flush_dcache_all
>   ARM: PSCI: export common PSCI function declarations for C code
>   ARM: allocate extra space for PSCI stack in secure section during link
>     phase
>   sunxi: Make CPUCFG_BASE macro names the same across families
>   sunxi: Group cpu core related controls together
>   sunxi: Add missing linux/types.h header for cpucfg.h
>   sunxi: Add CPUCFG debug lock and sun7i cpu power controls
>   sunxi: Add base address for GIC
>   sunxi: Add PSCI implementation in C
>
>  arch/arm/cpu/armv7/psci.S                          |  20 +-
>  arch/arm/cpu/armv7/sunxi/Makefile                  |   7 +-
>  arch/arm/cpu/armv7/sunxi/psci.c                    | 229 ++++++++++++++++++
>  arch/arm/cpu/armv7/sunxi/psci_head.S               |  61 +++++
>  arch/arm/cpu/armv7/sunxi/psci_sun6i.S              | 262 ---------------------
>  arch/arm/cpu/armv7/sunxi/psci_sun7i.S              | 237 -------------------
>  arch/arm/cpu/u-boot.lds                            |   3 +
>  arch/arm/include/asm/arch-sunxi/cpu_sun4i.h        |  17 +-
>  .../asm/arch-sunxi/{cpucfg_sun6i.h => cpucfg.h}    |  38 +--
>  arch/arm/include/asm/arch-sunxi/prcm.h             |   6 +-
>  arch/arm/include/asm/psci.h                        |   8 +
>  11 files changed, 350 insertions(+), 538 deletions(-)
>  create mode 100644 arch/arm/cpu/armv7/sunxi/psci.c
>  create mode 100644 arch/arm/cpu/armv7/sunxi/psci_head.S
>  delete mode 100644 arch/arm/cpu/armv7/sunxi/psci_sun6i.S
>  delete mode 100644 arch/arm/cpu/armv7/sunxi/psci_sun7i.S
>  rename arch/arm/include/asm/arch-sunxi/{cpucfg_sun6i.h => cpucfg.h} (69%)
>
> --
> 2.8.1
>


More information about the U-Boot mailing list