[U-Boot] [PATCH 06/11] imx: imx-common: introduce boot auxiliary core

Stefan Agner stefan at agner.ch
Thu Jan 7 07:59:17 CET 2016


On 2016-01-04 21:56, Peng Fan wrote:
> From: Peng Fan <peng.fan at nxp.com>
> 
> To boot a auxiliary core in asymmetric multicore system, introduce the
> new command "bootaux" to do it. Example of boot auxliary core from
> 0x70000000 where stores the boot head information that should be
> parsed by auxiliary core, "bootaux 0x70000000".

This reminds me of a question which was nagging me lately:
Is the M4 core of SoloX/MX7 running a boot ROM? Or who/what is "parsing
the boot head information"?


> Introduce Kconfig option IMX_BOOTAUX.
> 
> Signed-off-by: Ye.Li <ye.li at nxp.com>
> Signed-off-by: Peng Fan <peng.fan at nxp.com>
> ---
>  arch/arm/imx-common/Kconfig       |  6 ++++
>  arch/arm/imx-common/Makefile      |  1 +
>  arch/arm/imx-common/imx_bootaux.c | 59 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 66 insertions(+)
>  create mode 100644 arch/arm/imx-common/imx_bootaux.c
> 
> diff --git a/arch/arm/imx-common/Kconfig b/arch/arm/imx-common/Kconfig
> index c4f48bb..1b7da5a 100644
> --- a/arch/arm/imx-common/Kconfig
> +++ b/arch/arm/imx-common/Kconfig
> @@ -11,3 +11,9 @@ config IMX_RDC
>  	  i.MX Resource domain controller is used to assign masters
>  	  and peripherals to differet domains. This can be used to
>  	  isolate resources.
> +
> +config IMX_BOOTAUX
> +	bool "Support boot auxiliary core"
> +	depends on ARCH_MX7 || ARCH_MX6
> +	help
> +	  bootaux [addr] to boot auxiliary core.
> diff --git a/arch/arm/imx-common/Makefile b/arch/arm/imx-common/Makefile
> index 568f41c..30e66ba 100644
> --- a/arch/arm/imx-common/Makefile
> +++ b/arch/arm/imx-common/Makefile
> @@ -28,6 +28,7 @@ obj-y 	+= cache.o init.o
>  obj-$(CONFIG_CMD_SATA) += sata.o
>  obj-$(CONFIG_IMX_VIDEO_SKIP) += video.o
>  obj-$(CONFIG_IMX_RDC) += rdc-sema.o
> +obj-$(CONFIG_IMX_BOOTAUX) += imx_bootaux.o
>  obj-$(CONFIG_SECURE_BOOT)    += hab.o
>  endif
>  ifeq ($(SOC),$(filter $(SOC),vf610))
> diff --git a/arch/arm/imx-common/imx_bootaux.c
> b/arch/arm/imx-common/imx_bootaux.c
> new file mode 100644
> index 0000000..da424a7
> --- /dev/null
> +++ b/arch/arm/imx-common/imx_bootaux.c
> @@ -0,0 +1,59 @@
> +/*
> + * Copyright (C) 2016 Freescale Semiconductor, Inc.
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <command.h>
> +
> +/* Allow for arch specific config before we boot */
> +static int __arch_auxiliary_core_up(u32 core_id, u32 boot_private_data)
> +{
> +	/* please define platform specific arch_auxiliary_core_up() */
> +	return CMD_RET_FAILURE;
> +}
> +
> +int arch_auxiliary_core_up(u32 core_id, u32 boot_private_data)
> +	__attribute__((weak, alias("__arch_auxiliary_core_up")));
> +
> +/* Allow for arch specific config before we boot */
> +static int __arch_auxiliary_core_check_up(u32 core_id)
> +{
> +	/* please define platform specific arch_auxiliary_core_check_up() */
> +	return 0;
> +}
> +
> +int arch_auxiliary_core_check_up(u32 core_id)
> +	__attribute__((weak, alias("__arch_auxiliary_core_check_up")));
> +
> +int do_bootaux(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> +{
> +	ulong addr;
> +	int ret, up;
> +
> +	if (argc < 2)
> +		return CMD_RET_USAGE;
> +
> +	up = arch_auxiliary_core_check_up(0);
> +	if (up) {
> +		printf("## Auxiliary core is already up\n");
> +		return CMD_RET_SUCCESS;
> +	}
> +
> +	addr = simple_strtoul(argv[1], NULL, 16);
> +
> +	printf("## Starting auxiliary core at 0x%08lX ...\n", addr);
> +
> +	ret = arch_auxiliary_core_up(0, addr);
> +	if (ret)
> +		return CMD_RET_FAILURE;
> +
> +	return CMD_RET_SUCCESS;
> +}
> +
> +U_BOOT_CMD(
> +	bootaux, CONFIG_SYS_MAXARGS, 1,	do_bootaux,
> +	"Start auxiliary core",

What kind of image are supported by the bootaux command? Afaik, this is
some special/binary only format right?

Probably another discussion, but before polluting the command namespace:
Is that what we generally want?

--
Stefan

> +	""
> +);


More information about the U-Boot mailing list