Other Parts Discussed in Thread: SYSCONFIG
Hello TI team,
I'm working on AM64x EVM and I'm trying to run my R5 FW by the Linux processor when my reference is your ipc_rpmsg_echo_linux.
My FW application uses some interfaces such as UART, PRU and OSPI which listed in the gSocModulesClockFrequency array once you add them by SysConfig tool.
This array included in the generated file ti_power_config.c.
uint32_t gSocModules[] = {
TISCI_DEV_ADC0_ADC_CLK, TISCI_DEV_FSS0, TISCI_DEV_FSS0_FSAS_0, TISCI_DEV_FSS0_OSPI_0, TISCI_DEV_UART0, TISCI_DEV_PRU_ICSSG1,
SOC_MODULES_END,
};
SOC_ModuleClockFrequency gSocModulesClockFrequency[] = {
{TISCI_DEV_PRU_ICSSG1, TISCI_DEV_PRU_ICSSG1_CORE_CLK, 250000000},
{TISCI_DEV_PRU_ICSSG1, TISCI_DEV_PRU_ICSSG1_UCLK_CLK, 192000000},
{TISCI_DEV_PRU_ICSSG1, TISCI_DEV_PRU_ICSSG1_IEP_CLK, 200000000},
{TISCI_DEV_UART0, TISCI_DEV_UART0_FCLK_CLK, 96000000},
{TISCI_DEV_FSS0_OSPI_0, TISCI_DEV_FSS0_OSPI_0_OSPI_RCLK_CLK, 200000000U},
{SOC_MODULES_END, SOC_MODULES_END, SOC_MODULES_END},
};
Running the FW by the CCS it works properly, but when it loaded by the Linux, it gets assert in the generated function Module_clockSetFrequency when i=0.
I tried to remove some interfaces but I saw that if any element included in the array then it fails on the assert.
void Module_clockSetFrequency(void)
{
int32_t status;
uint32_t i = 0;
while(gSocModulesClockFrequency[i].moduleId!=SOC_MODULES_END)
{
status = SOC_moduleSetClockFrequency(
gSocModulesClockFrequency[i].moduleId,
gSocModulesClockFrequency[i].clkId,
gSocModulesClockFrequency[i].clkRate
);
DebugP_assertNoLog(status == SystemP_SUCCESS);
i++;
}
}
I added these drivers support to your example ipc_rpmsg_echo_linux by SysConfig and saw that once I load the FW by Linux it fails on the same assert , when i=0.
This example works properly from Linux without this change.
Before this change there are no elements in gSocModulesClockFrequency.
Please check your example with the addition of the drivers.
Thanks,
Dekel