@@ -127,10 +127,10 @@ static void sb3_DelayUs(uint32_t us)
127
127
sb3_Delay ((instNum + 2U ) / 3U );
128
128
}
129
129
130
- static uint32_t _ActiveApplicationRemapOffset (void )
131
- {
132
- return (MFLASH_FLEXSPI -> HADDROFFSET );
133
- }
130
+ // static uint32_t _ActiveApplicationRemapOffset(void)
131
+ // {
132
+ // return (MFLASH_FLEXSPI->HADDROFFSET);
133
+ // }
134
134
////////////////////////////////////////////////////////////////////////////
135
135
//! @brief power on device implementation
136
136
////////////////////////////////////////////////////////////////////////////
@@ -267,7 +267,7 @@ status_t sb3_fw_download_impl(LOAD_Target_Type loadTarget, uint32_t flag, uint32
267
267
{
268
268
volatile uint32_t * magic_pattern_addr = NULL ;
269
269
status_t status = kStatus_Fail ;
270
- int wait_count = 200 ;
270
+ int wait_count = 500 ;
271
271
uint8_t target_type = ((uint8_t )loadTarget & ~0x80 );
272
272
273
273
if ((g_bootloaderTree_v1 == NULL ) && ((get_chip_revision () == 1U ) || (get_chip_revision () == 2U )))
@@ -920,7 +920,7 @@ static status_t fsl_sbloader_pump(fsl_api_core_context_t *ctx, uint8_t *data, ui
920
920
921
921
////////////////////////////////////////////////////////////////////////////
922
922
//! @brief Read flash area loading to RAM buffer.
923
- // Direct read from flash is not allowed when remapping is active.
923
+ //
924
924
// buf : pointer to RAM buffer, its size must be sufficient to receive
925
925
// the required number of bytes.
926
926
// src_flash_offset: 'virtual' address in flash relative to start of flash storage.
@@ -929,32 +929,9 @@ static status_t fsl_sbloader_pump(fsl_api_core_context_t *ctx, uint8_t *data, ui
929
929
////////////////////////////////////////////////////////////////////////////
930
930
static status_t ldr_ReadFromFlash (uint8_t * buf , uint32_t src_flash_offset , size_t read_sz )
931
931
{
932
- status_t st ;
933
- static const uint32_t mflash_base = (1u << 27 );
934
- uint32_t remap_offset = _ActiveApplicationRemapOffset ();
935
- if (remap_offset == 0U )
936
- {
937
- memcpy (buf , (void * )src_flash_offset , read_sz );
938
- st = kStatus_Success ;
939
- }
940
- else
941
- {
942
- // similar to mflash_drv_log2phys
943
- uint32_t phys_offset = (src_flash_offset + remap_offset ) & ~mflash_base ;
944
- st = mflash_drv_read (phys_offset , (uint32_t * )buf , read_sz );
945
- }
946
- return st ;
947
- }
948
-
949
- ////////////////////////////////////////////////////////////////////////////
950
- //! @brief Read SB3 area descriptor.
951
- // Direct read from flash is not allowed when remapping is active.
952
- // hdr : pointer to RAM fsl_nboot_sb3_header_t structure.
953
- // sourceAddr: 'virtual' address where SB3 header is expected.
954
- ////////////////////////////////////////////////////////////////////////////
955
- status_t read_nboot_sb3_header (fsl_nboot_sb3_header_t * hdr , uint32_t sourceAddr )
956
- {
957
- return ldr_ReadFromFlash ((uint8_t * )hdr , sourceAddr , sizeof (fsl_nboot_sb3_header_t ));
932
+ /* When running from the remapped slot, using memcpy is valid, as long as accesses are not done in the overlaid region */
933
+ memcpy (buf , (void * )src_flash_offset , read_sz );
934
+ return kStatus_Success ;
958
935
}
959
936
960
937
////////////////////////////////////////////////////////////////////////////
@@ -1113,11 +1090,11 @@ static status_t loader_process_raw_file(uint32_t readOffset)
1113
1090
uint32_t total_raw_size = 0 ;
1114
1091
1115
1092
#ifdef CONFIG_FW_VDLLV2
1116
- if ((* ((uint32_t * )data_ptr ) == LOADER_RAW_BINARY_FORMAT ) && (* ((uint32_t * )(data_ptr + 4 )) == LOADER_VDLL_RAW_BINARY_FORMAT ))
1093
+ if ((* ((volatile uint32_t * )data_ptr ) == LOADER_RAW_BINARY_FORMAT ) && (* ((volatile uint32_t * )(data_ptr + 4 )) == LOADER_VDLL_RAW_BINARY_FORMAT ))
1117
1094
{
1118
1095
src_addr = data_ptr + 16 ;
1119
- dst_addr = (uint8_t * )(* ((uint32_t * )(data_ptr + 8 )));
1120
- code_size = * ((uint32_t * )(data_ptr + 12 ));
1096
+ dst_addr = (uint8_t * )(* ((volatile uint32_t * )(data_ptr + 8 )));
1097
+ code_size = * ((volatile uint32_t * )(data_ptr + 12 ));
1121
1098
(void )memcpy (dst_addr , src_addr , code_size );
1122
1099
status = kStatus_Success ;
1123
1100
}
@@ -1126,14 +1103,14 @@ static status_t loader_process_raw_file(uint32_t readOffset)
1126
1103
{
1127
1104
do
1128
1105
{
1129
- if (* ((uint32_t * )data_ptr ) != LOADER_RAW_BINARY_FORMAT )
1130
- {
1106
+ if (* ((volatile uint32_t * )data_ptr ) != LOADER_RAW_BINARY_FORMAT )
1107
+ {
1131
1108
break ;
1132
- }
1109
+ }
1133
1110
1134
1111
src_addr = data_ptr + 16 ;
1135
- dst_addr = (uint8_t * )(* ((uint32_t * )(data_ptr + 8 )));
1136
- code_size = * ((uint32_t * )(data_ptr + 12 ));
1112
+ dst_addr = (uint8_t * )(* ((volatile uint32_t * )(data_ptr + 8 )));
1113
+ code_size = * ((volatile uint32_t * )(data_ptr + 12 ));
1137
1114
// Check for raw ending segment
1138
1115
if ((uint32_t )src_addr == 0xffffffffU || (uint32_t )dst_addr == 0xffffffffU )
1139
1116
{
0 commit comments