Skip to content

Commit 5f907f9

Browse files
frank.leekelvincheung
authored andcommitted
soc: load_fw:
-modify modem start addr Signed-off-by: frank.lee <frank.lee@unisoc.com>
1 parent 9fbd173 commit 5f907f9

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

soc/load_fw.c

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2833
extern void GNSS_Start(void);
2934

@@ -63,24 +68,34 @@ int move_cp(char *src, char *dst, uint32_t size)
6368
int 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

Comments
 (0)