public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: keerthy <j-keerthy@ti.com>
To: u-boot@lists.denx.de
Subject: [PATCH v3 02/10] arm: k3: Add support for loading non linux remote cores
Date: Wed, 22 Jan 2020 06:40:41 +0530	[thread overview]
Message-ID: <32632902-9d2b-b288-87bf-790a76d43992@ti.com> (raw)
In-Reply-To: <50b76c52-a22c-7105-acba-8e344c4b118c@ti.com>



On 1/21/2020 6:26 PM, Andrew F. Davis wrote:
> On 1/21/20 6:07 AM, Keerthy wrote:
>> Add MAIN domain R5FSS0 remoteproc support from spl. This enables
>> loading the elf firmware in SPL and starting the remotecore.
>>
>> In order to start the core, there should be a file with path
>> "/lib/firmware/j7-main-r5f0_0-fw" under filesystem
>> of respective boot mode.
>>
>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
>> [Guard start_non_linux_remote_cores under CONFIG_FS_LOADER]
>> Signed-off-by: Andreas Dannenberg <dannenberg@ti.com>
>> ---
>>   arch/arm/mach-k3/common.c     | 84 ++++++++++++++++++++++++++++++++---
>>   arch/arm/mach-k3/common.h     |  2 +
>>   arch/arm/mach-k3/j721e_init.c | 34 ++++++++++++++
>>   3 files changed, 115 insertions(+), 5 deletions(-)
>>
>> diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
>> index 8d1529062d..f0ac0c39f1 100644
>> --- a/arch/arm/mach-k3/common.c
>> +++ b/arch/arm/mach-k3/common.c
>> @@ -16,6 +16,10 @@
>>   #include <asm/arch/sys_proto.h>
>>   #include <asm/hardware.h>
>>   #include <asm/io.h>
>> +#include <fs_loader.h>
>> +#include <fs.h>
>> +#include <env.h>
>> +#include <elf.h>
>>   
>>   struct ti_sci_handle *get_ti_sci_handle(void)
>>   {
>> @@ -57,6 +61,74 @@ int early_console_init(void)
>>   #endif
>>   
>>   #ifdef CONFIG_SYS_K3_SPL_ATF
>> +
>> +void init_env(void)
>> +{
>> +#ifdef CONFIG_SPL_ENV_SUPPORT
>> +	char *part;
>> +
>> +	env_init();
>> +	env_load();
>> +	switch (spl_boot_device()) {
>> +	case BOOT_DEVICE_MMC2:
>> +		part = env_get("bootpart");
>> +		env_set("storage_interface", "mmc");
>> +		env_set("fw_dev_part", part);
>> +		break;
>> +	case BOOT_DEVICE_SPI:
>> +		env_set("storage_interface", "ubi");
>> +		env_set("fw_ubi_mtdpart", "UBI");
>> +		env_set("fw_ubi_volume", "UBI0");
>> +		break;
>> +	default:
>> +		printf("%s from device %u not supported!\n",
>> +		       __func__, spl_boot_device());
> 
> 
> This will print for almost every boot mode..

I can keep this under debug.

> 
> 
>> +		return;
>> +	}
>> +#endif
>> +}
>> +
>> +#ifdef CONFIG_FS_LOADER
>> +int load_firmware(char *name_fw, char *name_loadaddr, u32 *loadaddr)
>> +{
>> +	struct udevice *fsdev;
>> +	char *name = NULL;
>> +	int size = 0;
>> +
>> +	*loadaddr = 0;
>> +#ifdef CONFIG_SPL_ENV_SUPPORT
>> +	switch (spl_boot_device()) {
>> +	case BOOT_DEVICE_MMC2:
>> +		name = env_get(name_fw);
>> +		*loadaddr = env_get_hex(name_loadaddr, *loadaddr);
>> +		break;
>> +	default:
>> +		printf("Loading rproc fw image from device %u not supported!\n",
>> +		       spl_boot_device());
> 
> 
> This whole thing seems very MMC specific, if early firmware loading is
> important it should work for all boot modes. Find a way to include it in
> the next boot stage FIT image (tispl.bin) so it works for all modes.

That was not NAKd. We are going with fs_loader approach.

> 
> 
>> +		return 0;
>> +	}
>> +#endif
>> +	if (!*loadaddr)
>> +		return 0;
>> +
>> +	if (!uclass_get_device(UCLASS_FS_FIRMWARE_LOADER, 0, &fsdev)) {
>> +		size = request_firmware_into_buf(fsdev, name, (void *)*loadaddr,
>> +						 0, 0);
>> +	}
>> +
>> +	return size;
>> +}
>> +#else
>> +int load_firmware(char *name_fw, char *name_loadaddr, u32 *loadaddr)
>> +{
>> +	return 0;
>> +}
>> +#endif
>> +
>> +__weak void start_non_linux_remote_cores(void)
>> +{
>> +}
>> +
>>   void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
>>   {
>>   	struct ti_sci_handle *ti_sci = get_ti_sci_handle();
>> @@ -65,15 +137,17 @@ void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
>>   	/* Release all the exclusive devices held by SPL before starting ATF */
>>   	ti_sci->ops.dev_ops.release_exclusive_devices(ti_sci);
>>   
>> +	ret = rproc_init();
>> +	if (ret)
>> +		panic("rproc failed to be initialized (%d)\n", ret);
>> +
>> +	init_env();
>> +	start_non_linux_remote_cores();
>> +
>>   	/*
>>   	 * It is assumed that remoteproc device 1 is the corresponding
>>   	 * Cortex-A core which runs ATF. Make sure DT reflects the same.
>>   	 */
>> -	ret = rproc_dev_init(1);
>> -	if (ret)
>> -		panic("%s: ATF failed to initialize on rproc (%d)\n", __func__,
>> -		      ret);
>> -
> 
> 
> Where did this code go?

rproc_init takes care of that.

> 
> 
>>   	ret = rproc_load(1, spl_image->entry_point, 0x200);
>>   	if (ret)
>>   		panic("%s: ATF failed to load on rproc (%d)\n", __func__, ret);
>> diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h
>> index d8b34fe060..42fb8ee6e7 100644
>> --- a/arch/arm/mach-k3/common.h
>> +++ b/arch/arm/mach-k3/common.h
>> @@ -24,3 +24,5 @@ void setup_k3_mpu_regions(void);
>>   int early_console_init(void);
>>   void disable_linefill_optimization(void);
>>   void remove_fwl_configs(struct fwl_data *fwl_data, size_t fwl_data_size);
>> +void start_non_linux_remote_cores(void);
>> +int load_firmware(char *name_fw, char *name_loadaddr, u32 *loadaddr);
>> diff --git a/arch/arm/mach-k3/j721e_init.c b/arch/arm/mach-k3/j721e_init.c
>> index f7f7398081..c5f8ede1a0 100644
>> --- a/arch/arm/mach-k3/j721e_init.c
>> +++ b/arch/arm/mach-k3/j721e_init.c
>> @@ -18,6 +18,7 @@
>>   #include <dm.h>
>>   #include <dm/uclass-internal.h>
>>   #include <dm/pinctrl.h>
>> +#include <remoteproc.h>
>>   
>>   #ifdef CONFIG_SPL_BUILD
>>   #ifdef CONFIG_K3_LOAD_SYSFW
>> @@ -295,3 +296,36 @@ void release_resources_for_core_shutdown(void)
>>   	}
>>   }
>>   #endif
>> +
>> +#ifdef CONFIG_SYS_K3_SPL_ATF
>> +void start_non_linux_remote_cores(void)
>> +{
>> +	int size = 0, ret;
>> +	u32 loadaddr = 0;
>> +
>> +	size = load_firmware("mainr5f0_0fwname", "mainr5f0_0loadaddr",
>> +			     &loadaddr);
>> +	if (size <= 0)
>> +		goto err_load;
>> +
>> +	/*  remoteproc 2 is aliased for the needed remotecore */
> 
> 
> Assuming the big-arm core to boot is remoteproc 1 was reasonable, but
> there needs to be a better what than assuming the number for every other
> remote core.
> 
> 
>> +	ret = rproc_load(2, loadaddr, size);
>> +	if (ret) {
>> +		printf("Firmware failed to start on rproc (%d)\n", ret);
>> +		goto err_load;
>> +	}
>> +
>> +	ret = rproc_start(2);
>> +	if (ret) {
>> +		printf("Firmware init failed on rproc (%d)\n", ret);
>> +		goto err_load;
>> +	}
>> +
>> +	printf("Remoteproc 2 started successfully\n");
> 
> 
> That's useful..

That is a print that tells everything went well with rproc 2. Otherwise 
one has to really find other ways to see if it succeeded or not.

> 
> Andrew
> 
> 
>> +
>> +	return;
>> +
>> +err_load:
>> +	rproc_reset(2);
>> +}
>> +#endif
>>

  reply	other threads:[~2020-01-22  1:10 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-21 11:07 [PATCH v3 00/10] Add support for loading main_r5fss0_core0 Keerthy
2020-01-21 11:07 ` [PATCH v3 01/10] lib: elf: Move the generic elf loading/validating functions to lib Keerthy
2020-01-21 12:47   ` Andrew F. Davis
2020-01-21 11:07 ` [PATCH v3 02/10] arm: k3: Add support for loading non linux remote cores Keerthy
2020-01-21 12:56   ` Andrew F. Davis
2020-01-22  1:10     ` keerthy [this message]
2020-01-22 16:25       ` Andrew F. Davis
2020-01-23  4:10         ` Keerthy
2020-01-23 13:24           ` Andrew F. Davis
2020-01-23 16:44             ` Keerthy
2020-01-23 17:05               ` Andrew F. Davis
2020-01-23 17:19                 ` Keerthy
2020-01-24  8:42                   ` Tero Kristo
2020-01-24 15:23                     ` Andrew F. Davis
2020-01-24 12:03                   ` Keerthy
2020-02-05 12:07                     ` Lokesh Vutla
2020-01-21 11:07 ` [PATCH v3 03/10] armv7R: K3: r5_mpu: Enable execute permission for MCU0 BTCM Keerthy
2020-01-21 11:07 ` [PATCH v3 04/10] armv7R: K3: Add support for jumping to firmware Keerthy
2020-01-21 11:07 ` [PATCH v3 05/10] arm: dts: k3-j721e-r5: Add fs_loader node Keerthy
2020-01-21 11:07 ` [PATCH v3 06/10] arm: dts: k3-j721e-r5: Enable r5fss0 cluster in SPL Keerthy
2020-01-21 11:07 ` [PATCH v3 07/10] include: configs: j721e_evm: Add env variables for mcu_r5fss0_core0 & main_r5fss0_core0 Keerthy
2020-01-21 13:02   ` Andrew F. Davis
2020-01-21 11:07 ` [PATCH v3 08/10] configs: j721e_evm_r5: Enable R5F remoteproc support Keerthy
2020-01-21 13:03   ` Andrew F. Davis
2020-01-21 11:07 ` [PATCH v3 09/10] configs: j721e_evm_r5_defconfig: Remove saving ENV in eMMC Keerthy
2020-01-21 11:07 ` [PATCH v3 10/10] env: nowhere: set default enviroment Keerthy
2020-01-21 13:07   ` Andrew F. Davis

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=32632902-9d2b-b288-87bf-790a76d43992@ti.com \
    --to=j-keerthy@ti.com \
    --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