ΣSigmaStudio Ask AI Русский Log in

SC58x Secondary Boot Load

Processors & DSP ShawnRArnold Feb 18, 2016 00:00 3 replies Original on forum ↗
Subscribe
ShawnRArnold Question
Feb 18, 2016 00:00

How do I start the SHARC+ core after a secondary boot load?

This is the process;

1. Reset

2. ARM boots (ROM loader) itself, loads SHARC0 and SHARC1, both held in reset.

3. ARM releases SHARC0 from reset.

4. SHARC0 loads SHARC1 L1 from SFLASH (loader file).

5. SHARC0 signals ARM to release SHARC1 from reset.

6. ??? - what's next - ???

This is what I have done that is _NOT_ working; ARM sets RCU_SVECT2 to the address (0x001C0A06) in the first block of the loader file and calls adi_core_enable(ADI_CORE_SHARC1).

Any ideas?

ShawnRArnold Reply
Feb 18, 2016 00:00

Answer: Do not attempt it from within CCES!

I was working on this from within CCES. It dawned on me that maybe it was being effected by an automatic break point. So I unchecked them all and it still did not work. So I just tried from outside CCES and BOOM, it worked.

However, I still don't know why CCES was holding off SHARC1.

Harshit.Gaharwar Reply
Feb 19, 2016 00:00

Hi,

I would suggest you to kindly refer to Application Note EE-384 for more insight in Boot concepts in ADSP-SC58x processor.

In ADSP-SC58x, Cortex A5 is the primary core which does the boot processing for all the 3 cores and then comes out of reset. The application running in Cortex A5 should release the other two sharc cores out of reset.

From your description, following scenario is possible:

After boot process by ARM core for all 3 core, ARM comes out of reset.

Application in ARM releases SHARC0 out of reset, as a result of which SHARC0 starts running the application.

Now SHARC0 can release the SHARC1 out of reset and it will start booting.

If you suspect, that the SHARC0 is unable to release the SHARC1 from reset, then I would suggest you to try the similar behavior via emulator to confirm on whether this works with that or not.

Instead of using “adi_core_enable(ADI_CORE_SHARC1);” you can use the following function call from SHARC0 to check if that helps at your end or not:

void Release_SHARC1_from_reset()

{

*pREG_RCU0_CRSTAT =BITM_RCU_CRSTAT_CR2;

*pREG_RCU0_SIDIS=BITM_RCU_SIDIS_SI1;

int i=0;

for( i=0; i<100000; i++);

*pREG_RCU0_CRCTL=BITM_RCU_CRCTL_CR2;

while((*pREG_RCU0_CRSTAT&BITM_RCU_CRSTAT_CR2)==0);

*pREG_RCU0_SIDIS &= ~BITM_RCU_SIDIS_SI1;

*pREG_RCU0_CRCTL &= ~BITM_RCU_CRCTL_CR2;

while((*pREG_RCU0_CRSTAT&BITM_RCU_CRSTAT_CR2)==1);

}

Single stepping inside the adi_core_enable will let you know why it does not work.

Other thing which you can try is create a project as ADSP-21584 and then check the code for adi_core_enable(ADI_CORE_SHARC1) which will be getting generated in SHARC0 core.

I think the macro is defined in such a way, that it is assumed that for ADSP-SC58x processor, ARM is the primary core and it should only release the both cores out of reset.

In ADSP-21584, SHARC0 is the primary core and it release SHARC1 out of reset.

This will explain why by using the CCES API to release SHARC1 from SHARC0 was failing.

Please let me know if you have any further queries.

Thanks,

Harshit

EZAdministrator Reply
Aug 2, 2018 00:00

This question has been assumed as answered either offline via email or with a multi-part answer. This question has now been closed out. If you have an inquiry related to this topic please post a new question in the applicable product forum.

Thank you,
EZ Admin