@@ -24,6 +24,11 @@ LOG_MODULE_DECLARE(LOG_MODULE_NAME);
2424#define CP_RUNNING_CHECK_CR 0x40a80000
2525#define CP_RUNNING_BIT 0
2626#define CP_WIFI_RUNNING_BIT 1
27+ #define CP_START_ADDR_OFFSET 16
28+
29+ #define CP_START_ADDR_CONTAINER 0x0200D000
30+ #define CP_START_MODEM0_ADDR (0x02000000 + FLASH_AREA_MODEM_0_OFFSET)
31+ #define CP_START_MODEM1_ADDR (0x02000000 + FLASH_AREA_MODEM_1_OFFSET)
2732
2833extern void GNSS_Start (void );
2934
@@ -63,24 +68,34 @@ int move_cp(char *src, char *dst, uint32_t size)
6368int load_fw (void )
6469{
6570 int ret = 0 ;
71+ int * p_addr = (int * )CP_START_ADDR_CONTAINER ;
72+ char * addr ;
6673 char * src = NULL ;
6774 uint32_t offset = 0 ;
6875
69- LOG_DBG ("load cp firmware start" );
76+ LOG_INF ("load cp firmware start" );
77+
78+ if ((* p_addr != CP_START_MODEM0_ADDR ) &&
79+ (* p_addr != CP_START_MODEM1_ADDR )) {
80+ addr = (char * )CP_START_MODEM0_ADDR + CP_START_ADDR_OFFSET ;
81+ } else {
82+ addr = (char * )(* p_addr ) + CP_START_ADDR_OFFSETs ;
83+ }
84+
7085 // load sector1
71- src = (char * )(CP_START_ADDR );
86+ src = (char * )(addr );
7287 ret = move_cp (src , (char * )CONFIG_CP_SECTOR1_LOAD_BASE , (uint32_t )CONFIG_CP_SECTOR1_LEN );
7388 offset += CONFIG_CP_SECTOR1_LEN ;
7489 // load sector 2
75- src = (char * )(CP_START_ADDR + offset );
90+ src = (char * )(addr + offset );
7691 ret = move_cp (src , (char * )CONFIG_CP_SECTOR2_LOAD_BASE , (uint32_t )CONFIG_CP_SECTOR2_LEN );
7792 offset += CONFIG_CP_SECTOR2_LEN ;
7893 // load sector 3
79- src = (char * )(CP_START_ADDR + offset );
94+ src = (char * )(addr + offset );
8095 ret = move_cp (src , (char * )CONFIG_CP_SECTOR3_LOAD_BASE , (uint32_t )CONFIG_CP_SECTOR3_LEN );
8196 offset += CONFIG_CP_SECTOR3_LEN ;
8297 // load sector 4
83- src = (char * )(CP_START_ADDR + offset );
98+ src = (char * )(addr + offset );
8499 // move_cp(src,(char *)CONFIG_CP_SECTOR4_LOAD_BASE,(uint32_t)CONFIG_CP_SECTOR4_LEN);
85100
86101 if (ret < 0 ) {
@@ -231,6 +246,7 @@ int uwp_mcu_init(void)
231246
232247 cp_sram_init ();
233248 GNSS_Start ();
249+
234250 ret = cp_mcu_pull_reset ();
235251 if (ret < 0 ) {
236252 LOG_ERR ("reset CP MCU fail" );
0 commit comments