mirror of
https://github.com/drasko/open-ameba.git
synced 2024-11-22 05:54:17 +00:00
Update boot-loader
This commit is contained in:
parent
67ea7a663c
commit
d8c84cd5fe
17 changed files with 2685 additions and 2397 deletions
|
@ -38,9 +38,11 @@
|
||||||
* ---------------------------------------------------*/
|
* ---------------------------------------------------*/
|
||||||
// This signature can be used to verify the correctness of the image
|
// This signature can be used to verify the correctness of the image
|
||||||
// It will be located in fixed location in application image
|
// It will be located in fixed location in application image
|
||||||
|
/* Moved in main.c
|
||||||
#include "section_config.h"
|
#include "section_config.h"
|
||||||
SECTION(".custom.validate.rodata")
|
SECTION(".custom.validate.rodata")
|
||||||
const unsigned char cus_sig[32] = "Customer Signature-modelxxx";
|
const unsigned char cus_sig[32] = "Customer Signature-modelxxx";
|
||||||
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -21,8 +21,27 @@
|
||||||
//#define BOOT_RAM_DATA_SECTION __attribute__((section(".boot.data")))
|
//#define BOOT_RAM_DATA_SECTION __attribute__((section(".boot.data")))
|
||||||
//#define BOOT_RAM_BSS_SECTION __attribute__((section(".boot.bss")))
|
//#define BOOT_RAM_BSS_SECTION __attribute__((section(".boot.bss")))
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
typedef struct _seg_header {
|
||||||
|
uint32 size;
|
||||||
|
uint32 ldaddr;
|
||||||
|
} IMGSEGHEAD, *PIMGSEGHEAD;
|
||||||
|
|
||||||
|
typedef struct _img2_header {
|
||||||
|
IMGSEGHEAD seg;
|
||||||
|
uint32 sign[2];
|
||||||
|
void (*startfunc)(void);
|
||||||
|
uint8 rtkwin[7];
|
||||||
|
uint8 ver[13];
|
||||||
|
uint8 name[32];
|
||||||
|
} IMG2HEAD, *PIMG2HEAD;
|
||||||
|
|
||||||
|
#ifndef FLASH_SECTOR_SIZE
|
||||||
|
#define FLASH_SECTOR_SIZE 4096
|
||||||
|
#endif
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Function declarations
|
// Function declarations
|
||||||
|
LOCAL void RtlBootToFlash(void); // image1
|
||||||
LOCAL void RtlBootToSram(void); // image1
|
LOCAL void RtlBootToSram(void); // image1
|
||||||
LOCAL void EnterImage15(void); // image1
|
LOCAL void EnterImage15(void); // image1
|
||||||
LOCAL void JtagOn(void); // image1
|
LOCAL void JtagOn(void); // image1
|
||||||
|
@ -39,11 +58,12 @@ typedef void (*START_FUNC)(void);
|
||||||
|
|
||||||
/* Start table: */
|
/* Start table: */
|
||||||
START_RAM_FUN_SECTION RAM_FUNCTION_START_TABLE __ram_start_table_start__ = {
|
START_RAM_FUN_SECTION RAM_FUNCTION_START_TABLE __ram_start_table_start__ = {
|
||||||
RtlBootToSram + 1, // StartFun(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 )
|
RtlBootToFlash + 1, // StartFun(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x80000000 )
|
||||||
RtlBootToSram + 1, // PatchWAKE(), Run if ( v40000210 & 0x20000000 )
|
RtlBootToSram + 1, // PatchWAKE(), Run if ( v40000210 & 0x20000000 )
|
||||||
RtlBootToSram + 1, //- PatchFun0(), Run if ( v40000210 & 0x10000000 )
|
RtlBootToSram + 1, // PatchFun0(), Run if ( v40000210 & 0x10000000 )
|
||||||
RtlBootToSram + 1, //+ PatchFun1(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 )
|
RtlBootToSram + 1,// PatchFun1(), Run if ( v400001F4 & 0x8000000 ) && ( v40000210 & 0x8000000 )
|
||||||
EnterImage15 + 1}; // PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 )
|
RtlBootToFlash + 1 };// PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 )
|
||||||
|
// EnterImage15 + 1}; // PatchFun2(), Run for Init console, if ( v40000210 & 0x4000000 )
|
||||||
|
|
||||||
/* Set Debug Flags */
|
/* Set Debug Flags */
|
||||||
LOCAL void BOOT_RAM_TEXT_SECTION SetDebugFlgs() {
|
LOCAL void BOOT_RAM_TEXT_SECTION SetDebugFlgs() {
|
||||||
|
@ -97,11 +117,15 @@ LOCAL void BOOT_RAM_TEXT_SECTION JtagOn(void) {
|
||||||
/* Enter Image 1.5 */
|
/* Enter Image 1.5 */
|
||||||
LOCAL void BOOT_RAM_TEXT_SECTION EnterImage15(void) {
|
LOCAL void BOOT_RAM_TEXT_SECTION EnterImage15(void) {
|
||||||
SetDebugFlgs();
|
SetDebugFlgs();
|
||||||
DBG_8195A("\rCPU CLK: %d Hz, SOC FUNC EN: %p\r\n", HalGetCpuClk(), HAL_PERI_ON_READ32(REG_SOC_FUNC_EN));
|
DBG_8195A(
|
||||||
DBG_8195A("==!== Enter Image 1.5 ====\nImg2 Sign: %s, InfaStart @ 0x%08x\r\n",
|
"\n===== Enter SRAM-Boot ====\nImg Sign: %s, Go @ 0x%08x\r\n",
|
||||||
&__image2_validate_code__, __image2_entry_func__);
|
&__image2_validate_code__, __image2_entry_func__);
|
||||||
|
#if CONFIG_DEBUG_LOG > 2
|
||||||
|
DBG_8195A("CPU CLK: %d Hz, SOC FUNC EN: %p\r\n", HalGetCpuClk(),
|
||||||
|
HAL_PERI_ON_READ32(REG_SOC_FUNC_EN));
|
||||||
|
#endif
|
||||||
if (_strcmp((const char *) &__image2_validate_code__, IMG2_SIGN_TXT)) {
|
if (_strcmp((const char *) &__image2_validate_code__, IMG2_SIGN_TXT)) {
|
||||||
DBG_MISC_ERR("Invalid Image2 Signature!\n");
|
DBG_MISC_ERR("Invalid Image Signature!\n");
|
||||||
RtlConsolRam();
|
RtlConsolRam();
|
||||||
}
|
}
|
||||||
__image2_entry_func__();
|
__image2_entry_func__();
|
||||||
|
@ -112,14 +136,251 @@ LOCAL void BOOT_RAM_TEXT_SECTION RtlBootToSram(void) {
|
||||||
JtagOn(); /* JTAG On */
|
JtagOn(); /* JTAG On */
|
||||||
_memset(&__rom_bss_start__, 0, &__rom_bss_end__ - &__rom_bss_start__);
|
_memset(&__rom_bss_start__, 0, &__rom_bss_end__ - &__rom_bss_start__);
|
||||||
__asm__ __volatile__ ("cpsid f\n");
|
__asm__ __volatile__ ("cpsid f\n");
|
||||||
HAL_SYS_CTRL_WRITE32(REG_SYS_SYSPLL_CTRL1, HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) & ( ~BIT_SYS_SYSPLL_DIV5_3));
|
HAL_SYS_CTRL_WRITE32(REG_SYS_SYSPLL_CTRL1,
|
||||||
|
HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) & ( ~BIT_SYS_SYSPLL_DIV5_3));
|
||||||
HalCpuClkConfig(2); // 41.666666 MHz
|
HalCpuClkConfig(2); // 41.666666 MHz
|
||||||
// HAL_SYS_CTRL_WRITE32(REG_SYS_SYSPLL_CTRL1, HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) | BIT_SYS_SYSPLL_DIV5_3); // 50.000 MHz
|
// HAL_SYS_CTRL_WRITE32(REG_SYS_SYSPLL_CTRL1, HAL_SYS_CTRL_READ32(REG_SYS_SYSPLL_CTRL1) | BIT_SYS_SYSPLL_DIV5_3); // 50.000 MHz
|
||||||
VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC
|
VectorTableInitRtl8195A(STACK_TOP); // 0x1FFFFFFC
|
||||||
HalInitPlatformLogUartV02();
|
HalInitPlatformLogUartV02();
|
||||||
HalInitPlatformTimerV02();
|
HalInitPlatformTimerV02();
|
||||||
__asm__ __volatile__ ("cpsie f\n");
|
__asm__ __volatile__ ("cpsie f\n");
|
||||||
|
// SdrPowerOff();
|
||||||
|
SDR_PIN_FCTRL(OFF);
|
||||||
|
LDO25M_CTRL(OFF);
|
||||||
|
HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN,
|
||||||
|
HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) | BIT(21));
|
||||||
|
|
||||||
SpicInitRtl8195AV02(1, 0); // StartupSpicBaudRate InitBaudRate 1, SpicBitMode 1 StartupSpicBitMode
|
SpicInitRtl8195AV02(1, 0); // StartupSpicBaudRate InitBaudRate 1, SpicBitMode 1 StartupSpicBitMode
|
||||||
// HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & 0x1FFFFF); // Clear debug flags
|
|
||||||
EnterImage15();
|
EnterImage15();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------------
|
||||||
|
Копирует данные из области align(4) (flash, registers, ...) в область align(1) (ram)
|
||||||
|
--------------------------------------------------------------------------------------*/
|
||||||
|
LOCAL unsigned int BOOT_RAM_TEXT_SECTION flashcpy(unsigned int faddr,
|
||||||
|
void *dist, unsigned int size) {
|
||||||
|
union {
|
||||||
|
unsigned char uc[4];
|
||||||
|
unsigned int ud;
|
||||||
|
} tmp;
|
||||||
|
if (faddr < SPI_FLASH_BASE)
|
||||||
|
faddr += SPI_FLASH_BASE;
|
||||||
|
unsigned char * pd = (unsigned char *) dist;
|
||||||
|
unsigned int *p = (unsigned int *) ((unsigned int) faddr & (~3));
|
||||||
|
unsigned int xlen = (unsigned int) faddr & 3;
|
||||||
|
unsigned int len = size;
|
||||||
|
|
||||||
|
if (xlen) {
|
||||||
|
tmp.ud = *p++;
|
||||||
|
while (len) {
|
||||||
|
len--;
|
||||||
|
*pd++ = tmp.uc[xlen++];
|
||||||
|
if (xlen & 4)
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
xlen = len >> 2;
|
||||||
|
while (xlen) {
|
||||||
|
tmp.ud = *p++;
|
||||||
|
*pd++ = tmp.uc[0];
|
||||||
|
*pd++ = tmp.uc[1];
|
||||||
|
*pd++ = tmp.uc[2];
|
||||||
|
*pd++ = tmp.uc[3];
|
||||||
|
xlen--;
|
||||||
|
};
|
||||||
|
if (len & 3) {
|
||||||
|
tmp.ud = *p;
|
||||||
|
pd[0] = tmp.uc[0];
|
||||||
|
if (len & 2) {
|
||||||
|
pd[1] = tmp.uc[1];
|
||||||
|
if (len & 1) {
|
||||||
|
pd[2] = tmp.uc[2];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SEG_ID_ERR,
|
||||||
|
SEG_ID_SRAM,
|
||||||
|
SEG_ID_TCM,
|
||||||
|
SEG_ID_SDRAM,
|
||||||
|
SEG_ID_SOC,
|
||||||
|
SEG_ID_FLASH,
|
||||||
|
SEG_ID_CPU,
|
||||||
|
SEG_ID_ROM,
|
||||||
|
SEG_ID_MAX
|
||||||
|
} SEG_ID;
|
||||||
|
|
||||||
|
LOCAL const char * const txt_tab_seg[] = {
|
||||||
|
"UNK", // 0
|
||||||
|
"SRAM", // 1
|
||||||
|
"TCM", // 2
|
||||||
|
"SDRAM", // 3
|
||||||
|
"SOC", // 4
|
||||||
|
"FLASH", // 5
|
||||||
|
"CPU", // 6
|
||||||
|
"ROM" // 7
|
||||||
|
};
|
||||||
|
|
||||||
|
LOCAL const uint32 tab_seg_def[] = { 0x10000000, 0x10070000, 0x1fff0000,
|
||||||
|
0x20000000, 0x30000000, 0x30200000, 0x40000000, 0x40800000, 0x98000000,
|
||||||
|
0xA0000000, 0xE0000000, 0xE0010000, 0x00000000, 0x00050000 };
|
||||||
|
|
||||||
|
LOCAL uint32 BOOT_RAM_TEXT_SECTION get_seg_id(uint32 addr, int32 size) {
|
||||||
|
uint32 ret = SEG_ID_ERR;
|
||||||
|
uint32 * ptr = &tab_seg_def;
|
||||||
|
if (size > 0) {
|
||||||
|
do {
|
||||||
|
ret++;
|
||||||
|
if (addr >= ptr[0] && addr + size <= ptr[1]) {
|
||||||
|
return ret;
|
||||||
|
};
|
||||||
|
ptr += 2;
|
||||||
|
} while (ret < SEG_ID_MAX);
|
||||||
|
};
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOCAL uint32 BOOT_RAM_TEXT_SECTION load_img2_head(uint32 faddr, PIMG2HEAD hdr) {
|
||||||
|
flashcpy(faddr, hdr, sizeof(IMG2HEAD));
|
||||||
|
uint32 ret = get_seg_id(hdr->seg.ldaddr, hdr->seg.size);
|
||||||
|
if (hdr->sign[1] == IMG_SIGN2_RUN) {
|
||||||
|
if (hdr->sign[0] == IMG_SIGN1_RUN) {
|
||||||
|
ret |= 1 << 9;
|
||||||
|
} else if (hdr->sign[0] == IMG_SIGN1_SWP) {
|
||||||
|
ret |= 1 << 8;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (*(u32 *) (&hdr->rtkwin) == IMG2_SIGN_DW1_TXT) {
|
||||||
|
ret |= 1 << 10;
|
||||||
|
};
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOCAL uint32 BOOT_RAM_TEXT_SECTION load_segs(uint32 faddr, PIMG2HEAD hdr,
|
||||||
|
uint8 flgload) {
|
||||||
|
uint32 fnextaddr = faddr;
|
||||||
|
uint8 segnum = 0;
|
||||||
|
while (1) {
|
||||||
|
uint32 seg_id = get_seg_id(hdr->seg.ldaddr, hdr->seg.size);
|
||||||
|
if (flgload && (seg_id == SEG_ID_SRAM || seg_id == SEG_ID_TCM)) {
|
||||||
|
#if CONFIG_DEBUG_LOG > 1
|
||||||
|
DBG_8195A("Load Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n",
|
||||||
|
segnum, faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr,
|
||||||
|
hdr->seg.size);
|
||||||
|
#endif
|
||||||
|
fnextaddr += flashcpy(fnextaddr, hdr->seg.ldaddr, hdr->seg.size);
|
||||||
|
} else if (seg_id) {
|
||||||
|
#if CONFIG_DEBUG_LOG > 2
|
||||||
|
DBG_8195A("Skip Flash seg%d: 0x%08x -> %s: 0x%08x, size: %d\n", segnum,
|
||||||
|
faddr, txt_tab_seg[seg_id], hdr->seg.ldaddr, hdr->seg.size);
|
||||||
|
#endif
|
||||||
|
fnextaddr += hdr->seg.size;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fnextaddr += flashcpy(fnextaddr, &hdr->seg, sizeof(IMGSEGHEAD));
|
||||||
|
segnum++;
|
||||||
|
}
|
||||||
|
return fnextaddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------------
|
||||||
|
* 0 - default image (config data + 0), 1 - image N1, 2 - image N2, ...
|
||||||
|
--------------------------------------------------------------------------------------*/
|
||||||
|
LOCAL int BOOT_RAM_TEXT_SECTION loadUserImges(int imgnum) {
|
||||||
|
IMG2HEAD hdr;
|
||||||
|
int imagenum = 1;
|
||||||
|
uint32 faddr = 0xb000; // start image2 in flash
|
||||||
|
DBG_8195A("Selected Image %d.\n", imgnum);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
faddr = (faddr + FLASH_SECTOR_SIZE - 1) & (~(FLASH_SECTOR_SIZE - 1));
|
||||||
|
uint32 img_id = load_img2_head(faddr, &hdr);
|
||||||
|
if ((img_id >> 8) > 4 || (uint8) img_id != 0) {
|
||||||
|
faddr = load_segs(faddr + 0x10, &hdr.seg, imagenum == imgnum);
|
||||||
|
if (imagenum == imgnum) {
|
||||||
|
// DBG_8195A("Image%d: %s\n", imgnum, hdr.name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
imagenum++;
|
||||||
|
} else if (imagenum) {
|
||||||
|
DBG_8195A("No Image%d! Trying Image0...\n", imgnum);
|
||||||
|
// пробуем загрузить image по умолчанию, по записи в секторе установок
|
||||||
|
flashcpy(FLASH_SYSTEM_DATA_ADDR, &faddr, sizeof(faddr));
|
||||||
|
if (faddr < 0x8000000)
|
||||||
|
faddr += SPI_FLASH_BASE;
|
||||||
|
if (get_seg_id(faddr, 0x100) == SEG_ID_FLASH) {
|
||||||
|
imagenum = 0;
|
||||||
|
imgnum = 0;
|
||||||
|
} else {
|
||||||
|
DBG_8195A("No Image0!\n");
|
||||||
|
imagenum = -1;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
imagenum = -1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return imagenum;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
extern PHAL_GPIO_ADAPTER _pHAL_Gpio_Adapter;
|
||||||
|
extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter;
|
||||||
|
//----- IsForceLoadDefaultImg2
|
||||||
|
LOCAL uint8 BOOT_RAM_TEXT_SECTION IsForceLoadDefaultImg2(void) {
|
||||||
|
uint8 gpio_pin[4];
|
||||||
|
HAL_GPIO_PIN GPIO_Pin;
|
||||||
|
HAL_GPIO_PIN_STATE flg;
|
||||||
|
int result = 0;
|
||||||
|
flashcpy(FLASH_SYSTEM_DATA_ADDR + 0x08, &gpio_pin, sizeof(gpio_pin)); // config data + 8
|
||||||
|
_pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter;
|
||||||
|
for (int i = 1; i; i--) {
|
||||||
|
uint8 x = gpio_pin[i];
|
||||||
|
result <<= 1;
|
||||||
|
if (x != 0xff) {
|
||||||
|
GPIO_Pin.pin_name = HAL_GPIO_GetIPPinName_8195a(x & 0x7F);
|
||||||
|
if (x & 0x80) {
|
||||||
|
GPIO_Pin.pin_mode = DIN_PULL_LOW;
|
||||||
|
flg = GPIO_PIN_HIGH;
|
||||||
|
} else {
|
||||||
|
GPIO_Pin.pin_mode = DIN_PULL_HIGH;
|
||||||
|
flg = GPIO_PIN_LOW;
|
||||||
|
}
|
||||||
|
HAL_GPIO_Init_8195a(&GPIO_Pin);
|
||||||
|
if (HAL_GPIO_ReadPin_8195a(&GPIO_Pin) == flg) {
|
||||||
|
result |= 1;
|
||||||
|
}
|
||||||
|
HAL_GPIO_DeInit_8195a(&GPIO_Pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_pHAL_Gpio_Adapter->IrqHandle.IrqFun = NULL;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOCAL void BOOT_RAM_TEXT_SECTION RtlBootToFlash(void) {
|
||||||
|
|
||||||
|
JtagOn(); /* JTAG On */
|
||||||
|
SetDebugFlgs();
|
||||||
|
DBG_8195A("===== Enter FLASH-Boot ====\n");
|
||||||
|
if (HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & (1 << BIT_SOC_FLASH_EN)) {
|
||||||
|
SPI_FLASH_PIN_FCTRL(ON);
|
||||||
|
/*
|
||||||
|
if(!SpicCmpDataForCalibrationRtl8195A()) {
|
||||||
|
DBG_8195A("ReInit Spic DIO...\n");
|
||||||
|
SpicInitRtl8195AV02(1, SpicDualBitMode);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
loadUserImges(IsForceLoadDefaultImg2() + 1);
|
||||||
|
};
|
||||||
|
if (_strcmp((const char *) &__image2_validate_code__, IMG2_SIGN_TXT)) {
|
||||||
|
DBG_8195A("Invalid Image Signature!\n");
|
||||||
|
RtlConsolRam();
|
||||||
|
} else
|
||||||
|
DBG_8195A("Go @ 0x%08x\r\n", __image2_entry_func__);
|
||||||
|
__image2_entry_func__();
|
||||||
|
}
|
||||||
|
|
|
@ -42,6 +42,7 @@ extern u8 __bss_start__, __bss_end__;
|
||||||
IMAGE2_START_RAM_FUN_SECTION RAM_START_FUNCTION gImage2EntryFun0 =
|
IMAGE2_START_RAM_FUN_SECTION RAM_START_FUNCTION gImage2EntryFun0 =
|
||||||
{ InfraStart + 1 };
|
{ InfraStart + 1 };
|
||||||
|
|
||||||
|
/*
|
||||||
//----- HalNMIHandler_Patch
|
//----- HalNMIHandler_Patch
|
||||||
void HalNMIHandler_Patch(void) {
|
void HalNMIHandler_Patch(void) {
|
||||||
DBG_8195A_HAL("%s:NMI Error!\n", __func__);
|
DBG_8195A_HAL("%s:NMI Error!\n", __func__);
|
||||||
|
@ -49,7 +50,6 @@ void HalNMIHandler_Patch(void) {
|
||||||
HalWdgIntrHandle(); // ROM: HalWdgIntrHandle = 0x3485;
|
HalWdgIntrHandle(); // ROM: HalWdgIntrHandle = 0x3485;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
//----- VectorTableOverrideRtl8195A
|
//----- VectorTableOverrideRtl8195A
|
||||||
void INFRA_START_SECTION VectorTableOverrideRtl8195A(u32 StackP) {
|
void INFRA_START_SECTION VectorTableOverrideRtl8195A(u32 StackP) {
|
||||||
NewVectorTable[2] = HalNMIHandler_Patch;
|
NewVectorTable[2] = HalNMIHandler_Patch;
|
||||||
|
@ -100,20 +100,32 @@ __weak int main(void) {
|
||||||
DiagPrintf("\r<RTL8710AF>");
|
DiagPrintf("\r<RTL8710AF>");
|
||||||
pUartLogCtl->ExecuteCmd = 0;
|
pUartLogCtl->ExecuteCmd = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern const unsigned char cus_sig[32];
|
||||||
//----- InfraStart
|
//----- InfraStart
|
||||||
void INFRA_START_SECTION InfraStart(void) {
|
void INFRA_START_SECTION InfraStart(void) {
|
||||||
NewVectorTable[2] = HalNMIHandler_Patch;
|
// NewVectorTable[2] = HalNMIHandler_Patch;
|
||||||
|
// HAL_SYS_CTRL_WRITE32(REG_SYS_CLK_CTRL0, HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL0) | BIT4);
|
||||||
|
DBG_8195A("===== Enter Image: %s ====\n", cus_sig);
|
||||||
|
#if CONFIG_DEBUG_LOG > 3
|
||||||
|
DBG_8195A("\rCPU CLK: %d Hz, SOC FUNC EN: %p\r\n", HalGetCpuClk(), HAL_PERI_ON_READ32(REG_SOC_FUNC_EN));
|
||||||
|
#endif
|
||||||
#ifdef CONFIG_TIMER_MODULE
|
#ifdef CONFIG_TIMER_MODULE
|
||||||
HalTimerOpInit_Patch((VOID*) (&HalTimerOp));
|
HalTimerOpInit_Patch((VOID*) (&HalTimerOp));
|
||||||
#endif
|
#endif
|
||||||
// HAL_SYS_CTRL_WRITE32(REG_SYS_CLK_CTRL0, HAL_SYS_CTRL_READ32(REG_SYS_CLK_CTRL0) | BIT4);
|
|
||||||
DBG_8195A("==!== Enter Image 2 ====\n");
|
|
||||||
// ShowRamBuildInfo(); // app_start.c: VOID ShowRamBuildInfo(VOID)
|
// ShowRamBuildInfo(); // app_start.c: VOID ShowRamBuildInfo(VOID)
|
||||||
memset(&__bss_start__, 0, &__bss_end__ - &__bss_start__);
|
memset(&__bss_start__, 0, &__bss_end__ - &__bss_start__);
|
||||||
|
|
||||||
|
//- Должно быть в boot !?
|
||||||
|
extern HAL_GPIO_ADAPTER gBoot_Gpio_Adapter;
|
||||||
|
memset(&gBoot_Gpio_Adapter, 0, sizeof(gBoot_Gpio_Adapter));
|
||||||
|
_pHAL_Gpio_Adapter = &gBoot_Gpio_Adapter;
|
||||||
|
//-
|
||||||
|
|
||||||
|
rtl_libc_init(); // ROM Lib C init
|
||||||
|
|
||||||
int flash_en = HAL_PERI_ON_READ32(REG_SOC_FUNC_EN)
|
int flash_en = HAL_PERI_ON_READ32(REG_SOC_FUNC_EN)
|
||||||
& (1 << BIT_SOC_FLASH_EN);
|
& (1 << BIT_SOC_FLASH_EN);
|
||||||
if (flash_en) {
|
if (flash_en) {
|
||||||
|
@ -129,6 +141,7 @@ void INFRA_START_SECTION InfraStart(void) {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
// Load SpicInitParaAllClk table
|
||||||
SpicNVMCalLoadAll();
|
SpicNVMCalLoadAll();
|
||||||
SpicReadIDRtl8195A();
|
SpicReadIDRtl8195A();
|
||||||
};
|
};
|
||||||
|
@ -142,20 +155,17 @@ void INFRA_START_SECTION InfraStart(void) {
|
||||||
*((int *) (SYSTEM_CTRL_BASE + REG_SYS_SYSPLL_CTRL1)) &= ~(1 << 17); // REG_SYS_SYSPLL_CTRL1 &= ~BIT_SYS_SYSPLL_DIV5_3
|
*((int *) (SYSTEM_CTRL_BASE + REG_SYS_SYSPLL_CTRL1)) &= ~(1 << 17); // REG_SYS_SYSPLL_CTRL1 &= ~BIT_SYS_SYSPLL_DIV5_3
|
||||||
HalCpuClkConfig(CPU_CLOCK_SEL_VALUE);
|
HalCpuClkConfig(CPU_CLOCK_SEL_VALUE);
|
||||||
#endif
|
#endif
|
||||||
|
SDIO_Device_Off();
|
||||||
HalReInitPlatformLogUartV02();
|
HalReInitPlatformLogUartV02();
|
||||||
/* HAL_LOG_UART_ADAPTER pUartAdapter;
|
|
||||||
pUartAdapter.BaudRate = UART_BAUD_RATE_38400;
|
|
||||||
HalLogUartSetBaudRate(&pUartAdapter); */
|
|
||||||
SystemCoreClockUpdate();
|
SystemCoreClockUpdate();
|
||||||
SYSPlatformInit();
|
SYSPlatformInit();
|
||||||
En32KCalibration();
|
En32KCalibration();
|
||||||
InitSoCPM();
|
InitSoCPM();
|
||||||
SDIO_Device_Off();
|
|
||||||
VectorTableInitForOSRtl8195A(&vPortSVCHandler, &xPortPendSVHandler,
|
VectorTableInitForOSRtl8195A(&vPortSVCHandler, &xPortPendSVHandler,
|
||||||
&xPortSysTickHandler);
|
&xPortSysTickHandler);
|
||||||
if (flash_en)
|
if (flash_en)
|
||||||
SpicFlashInitRtl8195A(SpicDualBitMode); // DIO
|
SpicFlashInitRtl8195A(SpicDualBitMode); // DIO
|
||||||
SPI_FLASH_PIN_FCTRL(OFF);
|
SPI_FLASH_PIN_FCTRL(OFF);
|
||||||
#ifdef CONFIG_SDR_EN
|
#ifdef CONFIG_SDR_EN
|
||||||
// clear SDRAM bss
|
// clear SDRAM bss
|
||||||
extern u8 __sdram_bss_start__[];
|
extern u8 __sdram_bss_start__[];
|
||||||
|
@ -169,7 +179,6 @@ void INFRA_START_SECTION InfraStart(void) {
|
||||||
"bic r0, r0, #7\n"
|
"bic r0, r0, #7\n"
|
||||||
"mov sp, r0\n"
|
"mov sp, r0\n"
|
||||||
);
|
);
|
||||||
rtl_libc_init();
|
|
||||||
__low_level_init();
|
__low_level_init();
|
||||||
main();
|
main();
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,6 +166,8 @@
|
||||||
#define IMG_SIGN2_RUN 0x31313738 // "8711"
|
#define IMG_SIGN2_RUN 0x31313738 // "8711"
|
||||||
#define IMG_SIGN2_SWP IMG_SIGN2_RUN // "8711"
|
#define IMG_SIGN2_SWP IMG_SIGN2_RUN // "8711"
|
||||||
#define IMG2_SIGN_TXT "RTKWin"
|
#define IMG2_SIGN_TXT "RTKWin"
|
||||||
|
#define IMG2_SIGN_DW1_TXT 0x574b5452 // "RTKW"
|
||||||
|
#define IMG2_SIGN_SW2_TXT 0x6e69 // "in"
|
||||||
|
|
||||||
typedef struct _RAM_FUNCTION_START_TABLE_ {
|
typedef struct _RAM_FUNCTION_START_TABLE_ {
|
||||||
VOID (*RamStartFun) (VOID); // Run for Init console, Run if ( v40000210 & 0x4000000 )
|
VOID (*RamStartFun) (VOID); // Run for Init console, Run if ( v40000210 & 0x4000000 )
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
4746
build/obj/build.nmap
4746
build/obj/build.nmap
File diff suppressed because it is too large
Load diff
|
@ -192,8 +192,8 @@ ifdef COMPILED_BOOT_BIN
|
||||||
$(OBJCOPY) --change-section-address .boot.head=0x10000ba8 -j .boot.head -j .bootloader -Obinary $(ELFFILE) $(RAM1P_IMAGE)
|
$(OBJCOPY) --change-section-address .boot.head=0x10000ba8 -j .boot.head -j .bootloader -Obinary $(ELFFILE) $(RAM1P_IMAGE)
|
||||||
else
|
else
|
||||||
$(OBJCOPY) -j .rom_ram -Obinary $(ELFFILE) $(RAM_IMAGE)
|
$(OBJCOPY) -j .rom_ram -Obinary $(ELFFILE) $(RAM_IMAGE)
|
||||||
$(OBJCOPY) -j .ram.start.table -j .ram_image1.text -Obinary $(ELFFILE) $(RAM1_IMAGE)
|
$(OBJCOPY) -j .ram.start.table -j .ram_image1.text -Obinary $(ELFFILE) $(RAM1R_IMAGE)
|
||||||
$(PICK) 0x$(RAM1_START_ADDR) 0x$(RAM1_END_ADDR) $(RAM1_IMAGE) $(RAM1R_IMAGE) head+reset_offset 0x0B000
|
$(PICK) 0x$(RAM1_START_ADDR) 0x$(RAM1_END_ADDR) $(RAM1R_IMAGE) $(RAM1P_IMAGE) head+reset_offset 0x0B000
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
$(error "BOOT-image size = 0")
|
$(error "BOOT-image size = 0")
|
||||||
|
|
|
@ -4,9 +4,9 @@ r1
|
||||||
trst1
|
trst1
|
||||||
h
|
h
|
||||||
r
|
r
|
||||||
loadbin build/bin/ram_1.bin 0x10000bc8
|
loadbin build/bin/ram_1.r.bin 0x10000bc8
|
||||||
loadbin build/bin/ram_2.bin 0x10006000
|
loadbin build/bin/ram_2.bin 0x10006000
|
||||||
r
|
r
|
||||||
w4 0x40000210,0x20111117
|
w4 0x40000210,0x20111113
|
||||||
g
|
g
|
||||||
q
|
q
|
|
@ -25,7 +25,7 @@
|
||||||
#undef CONFIG_MP
|
#undef CONFIG_MP
|
||||||
#undef CONFIG_CP
|
#undef CONFIG_CP
|
||||||
#undef CONFIG_FT
|
#undef CONFIG_FT
|
||||||
#define RTL8195A 1
|
#define RTL8195A 7
|
||||||
/* 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000? Hz,
|
/* 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000? Hz,
|
||||||
6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000? Hz */
|
6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000? Hz */
|
||||||
#define CONFIG_CPU_CLK 1
|
#define CONFIG_CPU_CLK 1
|
||||||
|
|
|
@ -35,6 +35,14 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "wifi_api.h"
|
#include "wifi_api.h"
|
||||||
|
|
||||||
|
/* ---------------------------------------------------
|
||||||
|
* Customized Signature (Image Name)
|
||||||
|
* ---------------------------------------------------*/
|
||||||
|
#include "section_config.h"
|
||||||
|
SECTION(".custom.validate.rodata")
|
||||||
|
const unsigned char cus_sig[32] = "MP3 Stereo";
|
||||||
|
|
||||||
|
|
||||||
#define DEBUG_MAIN_LEVEL 1
|
#define DEBUG_MAIN_LEVEL 1
|
||||||
|
|
||||||
//Priorities of the reader and the decoder thread. Higher = higher prio.
|
//Priorities of the reader and the decoder thread. Higher = higher prio.
|
||||||
|
|
|
@ -50,7 +50,7 @@ application: build_info $(SRC_O) $(DRAM_O) $(BOOT_O)
|
||||||
# @echo "==========================================================="
|
# @echo "==========================================================="
|
||||||
@mkdir -p $(BIN_DIR) $(OBJ_DIR)
|
@mkdir -p $(BIN_DIR) $(OBJ_DIR)
|
||||||
## @cp $(patsubst sdk/%,$(SDK_PATH)%,$(BOOTS))/ram_1.r.bin $(BIN_DIR)/ram_1.r.bin
|
## @cp $(patsubst sdk/%,$(SDK_PATH)%,$(BOOTS))/ram_1.r.bin $(BIN_DIR)/ram_1.r.bin
|
||||||
@cp $(patsubst sdk/%,$(SDK_PATH)%,$(BOOTS))/ram_1.p.bin $(BIN_DIR)/ram_1.p.bin
|
## @cp $(patsubst sdk/%,$(SDK_PATH)%,$(BOOTS))/ram_1.p.bin $(BIN_DIR)/ram_1.p.bin
|
||||||
# @chmod 777 $(OBJ_DIR)/ram_1.r.bin
|
# @chmod 777 $(OBJ_DIR)/ram_1.r.bin
|
||||||
## $(OBJCOPY) --rename-section .data=.loader.data,contents,alloc,load,readonly,data -I binary -O elf32-littlearm -B arm $(BIN_DIR)/ram_1.r.bin $(OBJ_DIR)/ram_1.r.o
|
## $(OBJCOPY) --rename-section .data=.loader.data,contents,alloc,load,readonly,data -I binary -O elf32-littlearm -B arm $(BIN_DIR)/ram_1.r.bin $(OBJ_DIR)/ram_1.r.o
|
||||||
@echo "==========================================================="
|
@echo "==========================================================="
|
||||||
|
|
|
@ -116,7 +116,7 @@ SRC_C += sdk/component/common/api/lwip_netconf.c
|
||||||
#SRC_C += sdk/component/common/utilities/ssl_client_ext.c
|
#SRC_C += sdk/component/common/utilities/ssl_client_ext.c
|
||||||
SRC_C += sdk/component/common/utilities/tcptest.c
|
SRC_C += sdk/component/common/utilities/tcptest.c
|
||||||
SRC_C += sdk/component/common/utilities/uart_ymodem.c
|
SRC_C += sdk/component/common/utilities/uart_ymodem.c
|
||||||
SRC_C += sdk/component/common/utilities/update.c
|
#SRC_C += sdk/component/common/utilities/update.c
|
||||||
#SRC_C += sdk/component/common/application/uart_adapter/uart_adapter.c
|
#SRC_C += sdk/component/common/application/uart_adapter/uart_adapter.c
|
||||||
SRC_C += sdk/component/common/api/network/src/wlan_network.c
|
SRC_C += sdk/component/common/api/network/src/wlan_network.c
|
||||||
SRC_C += sdk/component/common/api/wifi_interactive_mode.c
|
SRC_C += sdk/component/common/api/wifi_interactive_mode.c
|
||||||
|
|
Loading…
Reference in a new issue