Tool/software: Code Composer Studio
Code composer Version: 10.0.0.00010
Board bringup of the current hardware is done. Board is up and running.
Requirement is to debug from application source code upto driver layers.
While debugging on TDA2Pxx(running TI RTOS), multiprocessor(M4 and A15) environment using code composer studio using available CCS TDA2Px gel files.
We are able to debug across processors by commenting the TDA2Px_DDR3_666MHz_Config()function call in the below gel file. We are trying to understand the root cause of our issue.
Below is the issue explained in detail :
- Inorder to debug on multiprocessors M4 and A15, we have done the following tweaks in the gel file: TDA2Px_startup_common.gel
In the below function OnTargetConnect() - TDA2Px_EVM is true in our case -
Our understanding is all PRCM config, PAD config and DDR config functon calls can be disabled/commented. Since Clock, DDR and PAD configurations are done already during booting through bootloader.
However, enabling the PRCM config, PAD config and DDR config functon calls should reconfigure and not cause any issues. But in our case TDA2Px_DDR3_666MHz_Config() function call terminates with read error.
We face the below error while connecting A15 target on CCS.
CortexA15_0: GEL Output: DDR DPLL already locked, now unlocking....
CortexA15_0: GEL Output: DDR DPLL clock config for 666MHz is in DONE!
CortexA15_0: GEL: Error while executing OnTargetConnect(): Target failed to read 0x4C000060
at IODFT_TLGC=*((unsigned int *) (base_addr+0x60U)) [TDA2Px_ddr_config.gel:255]
at TDA2Px_reset_emif_params_ddr3_666(0x4c000000U) [TDA2Px_ddr_config.gel:1382]
at TDA2Px_DDR3_666MHz_Config() [TDA2Px_startup_common.gel:43]
at OnTargetConnect()
1. What could the reason be, for not able to read address 0x4C000060? When the same function(TDA2Px_reset_emif_params_ddr3_666) is being executed properly while booting through bootloader.
2. Is it necessary to execute the code block under 'if(TDA2Px_EVM == TRUE)' condition? Can it be ignored by commenting
File: TDA2Px_startup_common.gel
OnTargetConnect()
{
GEL_TextOut("--->>> TDA2Px Target Connect Sequence Begins ... <<<---\n");
TDA2Px_target_connect_sequence();
if (TDA2Px_EVM)
{
/* EVM options */
/* Choose based on DEVICE and OPP */
TDA2Px_PRCM_Clock_Config_OPPNOM_ADAS();
TDA2Px_PRCM_Clock_Config_OPPOD_ADAS();
TDA2Px_PRCM_Clock_Config_OPPHIGH_ADAS();
TDA2Px_PRCM_Module_AllEnable_Config();
//TDA2Px_DDR3_666MHz_Config();
//TDA2Px_DDR3_400MHz_Config();
//TDA2Px_DDR2_400MHz_Config();
TDA2Px_PAD_VisionAll_Config();
TDA2Px_PAD_PAB_MII_Config();
TDA2Px_PAD_PAB_RMII_Config();
}
else
{
/* PAB options */
TDA2Px_PRCM_Clock_Config_OPPNOM_TDA2x_GENERIC();
TDA2Px_PRCM_Module_AllEnable_Config();
TDA2Px_DDR3_666MHz_Config();
//TDA2Px_DDR3_400MHz_Config();
//TDA2Px_DDR2_400MHz_Config();
//TDA2Px_EMIF1_EMIF2_Interleave_128byte();
TDA2Px_PAD_VisionAll_Config();
//TDA2Px_PAD_PAB_MII_Config();
//TDA2Px_PAD_PAB_RMII_Config();
}
GEL_TextOut("--->>> TDA2Px Target Connect Sequence DONE !!!!! <<<---\n");
}