📄 bldbgprc.c
字号:
{
SelectSdram(SELECT_SDRAM);
return 0;
}
//!!}
//!! else
//!! {
//!! bl_bspi_ptr->sf_id = bl_bspi_rdid(bl_bspi_ptr);
//!!if(bl_sf_erase(bl_bspi_ptr) == 0)
//!!{
//!! return 0;
//!! }
//!!}
// Xsfer Patch Code Into RAM_A Patch Code area.
//!!if(bl->dwn_ctrl_flags.sdram_connected)
//!!{
//!! SelectSdram(SELECT_BSPI);
//!!}
bl_code_addr_ptr = (uint32 *)BL_RAM_A_BASE_ADDR; // 0x4000 0000
bl_mem_size = bl->patch_area_size ; // 0x18000/0xA000
bl_sf_addr = BL_SF_PATCH_AREA_START_ADDR; // 0x0000 0000
for(i = 0; i < (bl_mem_size>>8); i++)
{
// Each Cycle is 256 bytes (0x100)
j = 0;
while(j < 256)
{
bl->code_word.all = *bl_code_addr_ptr;
bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_code_addr_ptr++;
}
if(bl_sf_pp(bl_sf_addr, 256, bl_bspi_ptr) == 0)
{
SelectSdram(SELECT_SDRAM);
return 0;
}
bl_sf_addr += 0x100;
}
// Verify
bl_code_addr_ptr = (uint32 *)BL_RAM_A_BASE_ADDR;
//[Opt] bl_mem_size = BL_PATCH_AREA_SIZE;
bl_sf_addr = BL_SF_PATCH_AREA_START_ADDR;
for(i = 0; i < (bl_mem_size>>8); i++)
{
// Each Cycle is 256 bytes (0x100)
bl_sf_read(bl_sf_addr, 256, &bl->bspi);
j = 0;
while (j < 256)
{
bl->code_word.all = *bl_code_addr_ptr;
if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
{
SelectSdram(SELECT_SDRAM);
return 0;
}
bl_code_addr_ptr++;
}
bl_sf_addr += 0x100;
}
// Xfer Overlay Code, DSP Code and Further Info to SDRAM
//if(bl->dwn_ctrl_flags.sdram_connected)
//{
// Something has been Trasferred into SDRAM
if(bl->dwn_ctrl_flags.patch_code_activated)
{
SelectSdram(SELECT_SDRAM);
bl_code_addr_ptr = (uint32 *)BL_SDRAM_BASE_ADDR; // 0x8000 0000
// 0x80000 - 0x14000 - 0x100.
//bl_mem_size = BL_OVERLAY_AREA_SIZE*BL_OVERLAY_QTY;
bl_mem_size = bl->sf_data_4_sdram_size ;
bl_sf_addr = bl->sf_overlay_area_start_addr;
for(i = 0; i < (bl_mem_size>>8); i++)
{
// Each Cycle is 256 bytes (0x100)
j = 0;
while(j < 256)
{
bl->code_word.all = *bl_code_addr_ptr;
bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_code_addr_ptr++;
}
SelectSdram(SELECT_BSPI);
if(bl_sf_pp(bl_sf_addr, 256, bl_bspi_ptr) == 0)
{
SelectSdram(SELECT_SDRAM);
return 0;
}
bl_sf_addr += 0x100;
SelectSdram(SELECT_SDRAM);
}
// Verify
bl_code_addr_ptr = (uint32 *)BL_SDRAM_BASE_ADDR;
//[Opt] bl_mem_size = bl->sf_data_4_sdram_size ;
bl_sf_addr = bl->sf_overlay_area_start_addr;
for(i = 0; i < (bl_mem_size>>8); i++)
{
// Each Cycle is 256 bytes (0x100)
SelectSdram(SELECT_BSPI);
bl_sf_read(bl_sf_addr, 256, bl_bspi_ptr);
SelectSdram(SELECT_SDRAM);
j = 0;
while (j < 256)
{
bl->code_word.all = *bl_code_addr_ptr;
if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
{
return 0;
}
bl_code_addr_ptr++;
}
bl_sf_addr += 0x100;
}
}
if(bl_StoreDwlInfo(&bl->bspi))
{
return 1;
}
else
{
return 0;
}
}
/******************************************************************************/
/* Function: bl_StoreDwlInfo */
/* */
/* \brief It stores download information into last 256 bytes */
/* of Serial Flash */
/* */
/* \param void */
/* */
/* \return void */
/* \remark */
/* */
/******************************************************************************/
uint32 bl_StoreDwlInfo(BL_BSPI_STRUCT *bl_bspi_ptr)
{
//uint32 i;
uint32 j;
//uint32 *bl_code_addr_ptr;
uint32 bl_sf_addr;
//uint32 bl_mem_size;
// Xsfer Patch Code Into RAM_A Patch Code area.
bl_sf_addr = bl->sf_dwn_info;
// Each Cycle is 256 bytes (0x100)
j = 0;
while(j < 232)
{
bl->code_word.all = 0x00;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);
}
bl->code_word.all = bl->max_addr;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);
bl->code_word.all = bl->code_size;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);
bl->code_word.all = bl->code_checksum;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);
bl->code_word.all = bl->max_sdram_addr;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);
bl->code_word.all = bl->sdram_code_size;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);
bl->code_word.all = bl->sdram_code_checksum;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b0;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b1;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b2;
//bl_bspi_ptr->bspi_tx_buffer[j++] = bl->code_word.field.b3;
bl_wr_bspi_tx_buffer(bl_bspi_ptr, &j);
//!!if(bl->dwn_ctrl_flags.sdram_connected)
//!!{
SelectSdram(SELECT_BSPI);
if(bl_sf_pp(bl_sf_addr, 256, bl_bspi_ptr) == 0)
{
SelectSdram(SELECT_SDRAM);
return 0;
}
SelectSdram(SELECT_SDRAM);
//!!}
//!!else
//!!{
//!! if(bl_sf_pp(bl_sf_addr, 256, bl_bspi_ptr) == 0)
//!! {
//!! return 0;
//!! }
//!!}
// Verify
bl_sf_addr = bl->sf_dwn_info ;
//!!l->dwn_ctrl_flags.sdram_connected)
//!!
SelectSdram(SELECT_BSPI);
bl_sf_read(bl_sf_addr, 256, bl_bspi_ptr);
SelectSdram(SELECT_SDRAM);
//!!
//!!
//!!
//!! bl_sf_read(bl_sf_addr, 256, bl_bspi_ptr);
//!!}
j = 232;
bl->code_word.all = bl->max_addr;
if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
{
return 0;
}
bl->code_word.all = bl->code_size;
if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
{
return 0;
}
bl->code_word.all = bl->code_checksum;
if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
{
return 0;
}
// Size of the code downloaded into SDRAM
bl->code_word.all = bl->max_sdram_addr;
if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
{
return 0;
}
// Size of the Code downloaded into SDRAM
bl->code_word.all = bl->sdram_code_size;
if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
{
return 0;
}
// Checksum of Code dowloaded into SDRAM
bl->code_word.all = bl->sdram_code_checksum;
if ((bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b0)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b1)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b2)
|| (bl_bspi_ptr->bspi_rx_buffer[4 + j++] != bl->code_word.field.b3))
{
return 0;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -