This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Tool/software:
Hello TI team,
About Specifications of SBL OSPI Multi-Partition, please tell me.
environment:
CCS12.7.0
AM243x MCU+SDK 09.02.01.05
LP-AM2434
R5F application constitution
R5F 0-0 used
R5F 0-1 not used
R5F 1-0 used
R5F 1-1 used
I seem to initialize all R5F when I confirm log of SBL.
INFO: Bootloader_runCpu:155: CPU r5f1-0 is initialized to 800000000 Hz !!!
INFO: Bootloader_runCpu:155: CPU r5f1-1 is initialized to 800000000 Hz !!!
INFO: Bootloader_runCpu:155: CPU m4f0-0 is initialized to 400000000 Hz !!!
INFO: Bootloader_loadSelfCpu:207: CPU r5f0-0 is initialized to 800000000 Hz !!!
INFO: Bootloader_loadSelfCpu:207: CPU r5f0-1 is initialized to 800000000 Hz !!!
Q1.After having initialized a CPU, does SBL start R5F 0-0, 0-1, 1-0, 1-1, all R5F application?
There is not the R5F 0-1 application in build environment.
Q1-2. In SBL OSPI Multi-Partition, can the R5F application only for 2BANK of only 3BANK of the discontinuity or the discontinuity start?
I may mind one point.
I explain the log mentioned above.
test1. At first it is confirmed start of four R5F application
test2. It is confirmed start of three R5F application afterwards
It is log when I carried out test2.
Q2. When I transferred it to 3 banks from 4 banks, does the R5F 0-1 application remain in the R5F 0-1 bank of QSPI?
I think that SBL started if I stay.
Regards,
Yoshiki Koide
Hello,
A1) As stated in the comment below, if the SBL doesn't find an application image for a core, it will make the core run with an infinite while loop.
❯ cat examples/drivers/boot/sbl_ospi_multi_partition/am243x-evm/r5fss0-0_nortos/main.c ... status = Sciclient_getVersionCheck(1); if(SystemP_SUCCESS == status) { /* load and run all CPUs, if a application is not found, the core is run with a while(1); loop */ uint32_t coreVariant = Bootloader_socGetCoreVariant(); if((coreVariant == BOOTLOADER_DEVICE_VARIANT_QUAD_CORE) || (coreVariant == BOOTLOADER_DEVICE_VARIANT_DUAL_CORE)) { if(status == SystemP_SUCCESS) { status = App_bootCpu( CONFIG_BOOTLOADER_FLASH_R5FSS1_0, CSL_CORE_ID_R5FSS1_0 ); } ...
A1-2) You may choose to not run a particular R5F core with any application according to your requirements.
A2) Yes, it will remain there unless manually erased. If you do want to run a particular R5F core with any application, you have to ensure the SBL doesn't find an image for that core in the flash.
Regards,
Prashant
Hello, Prashant
Thank you for your answer. Even if BANK did not continue as for me, I hoped that I worked normally.
I must revise SBL OSPI MULTI-PARTITION application.
Please tell me a little more.
A1)
/* load and run all CPUs, if a application is not found, the core is run with a while(1); loop */
In this comment sentence, I am listed with loop.
I was not able to find it where you carried out while(1).
I confirmed Bootloader_socGetCoreVariant().
coreVariant = (CSL_REG32_RD(BOOTLOADER_DEVICE_JTAG_USERID_REG) & BOOTLOADER_DEVICE_JTAG_USERID_CORENUM_MASK);
#define CSL_REG32_RD(p) (CSL_REG32_RD_RAW((volatile uint32_t *) (p)))
In this way, a loop does not make it.
Where are you doing loop?
A1-2, A2)
Please advise specific R5F application about a method to carry out.
If there is not appimage in flash memory in Bootloader_parseMultiCoreAppImage(), I think that it is terminated abnormally.
Is this way of thinking right?
Please tell me the function name if right you file it, and where you open.
I want to know an access method to appimage.
My ideas are as follows:
retcode = Bootloader_parseMultiCoreAppImage();
if (retcode < 0) {
exist = open();
if (exist == ok) {
// Normal processing
}
else {
// I do nothing
}
}
Do you have the idea other than the existence confirmation of the file?
Please tell me if you have an idea.
Regards.
Hi Yoshiki,
A1) I checked the full code of SBL_OSPI_MULTI_PARTITION and realize that comment is misleading. The default SBL_OSPI_MULTI_PARTITION will always try to find & parse an appimage for each core via the Bootloader_parseMultiCoreAppImage function.
If this function returns FAILURE (status = SystemP_FAILURE), the SBL considers this as a boot failure & so will not execute any further steps guarded by the if condition "status == SystemP_SUCCESS".
A1-2, A2) In order to exclude running an application on a core, you can comment the corresponding code like shown for the M4F core
diff --git a/examples/drivers/boot/sbl_ospi_multi_partition/am243x-lp/r5fss0-0_nortos/main.c b/examples/drivers/boot/sbl_ospi_multi_partition/am243x-lp/r5fss0-0_nortos/main.c index b663b288..cd8e6c89 100644 --- a/examples/drivers/boot/sbl_ospi_multi_partition/am243x-lp/r5fss0-0_nortos/main.c +++ b/examples/drivers/boot/sbl_ospi_multi_partition/am243x-lp/r5fss0-0_nortos/main.c @@ -182,10 +182,10 @@ int main(void) } if (!Bootloader_socIsMCUResetIsoEnabled()) { - if(SystemP_SUCCESS == status) - { - status = App_bootCpu( CONFIG_BOOTLOADER_FLASH_M4FSS0_0, CSL_CORE_ID_M4FSS0_0 ); - } + /*if(SystemP_SUCCESS == status)*/ + /*{*/ + /* status = App_bootCpu( CONFIG_BOOTLOADER_FLASH_M4FSS0_0, CSL_CORE_ID_M4FSS0_0 );*/ + /*}*/ } if(SystemP_SUCCESS == status) {
Otherwise, the idea you mention also works. You may do nothing if Bootloader_parseMultiCoreAppImage returns FAILURE & proceed forward with booting appimages for the other cores.
Regards,
Prashant
Hello Prashant,
Thank you for your response. I will check it.
"This resolved my issue."
I will post any new or unclear information.
Regards,
Yoshiki