@@ -898,6 +898,23 @@ static int cfi_intel_erase(struct flash_bank *bank, int first, int last)
898898 return cfi_send_command (bank , 0xff , flash_address (bank , 0 , 0x0 ));
899899}
900900
901+ static int cfi_spansion_unlock_seq (struct flash_bank * bank )
902+ {
903+ int retval ;
904+ struct cfi_flash_bank * cfi_info = bank -> driver_priv ;
905+ struct cfi_spansion_pri_ext * pri_ext = cfi_info -> pri_ext ;
906+
907+ retval = cfi_send_command (bank , 0xaa , flash_address (bank , 0 , pri_ext -> _unlock1 ));
908+ if (retval != ERROR_OK )
909+ return retval ;
910+
911+ retval = cfi_send_command (bank , 0x55 , flash_address (bank , 0 , pri_ext -> _unlock2 ));
912+ if (retval != ERROR_OK )
913+ return retval ;
914+
915+ return ERROR_OK ;
916+ }
917+
901918static int cfi_spansion_erase (struct flash_bank * bank , int first , int last )
902919{
903920 int retval ;
@@ -906,23 +923,15 @@ static int cfi_spansion_erase(struct flash_bank *bank, int first, int last)
906923 int i ;
907924
908925 for (i = first ; i <= last ; i ++ ) {
909- retval = cfi_send_command (bank , 0xaa , flash_address (bank , 0 , pri_ext -> _unlock1 ));
910- if (retval != ERROR_OK )
911- return retval ;
912-
913- retval = cfi_send_command (bank , 0x55 , flash_address (bank , 0 , pri_ext -> _unlock2 ));
926+ retval = cfi_spansion_unlock_seq (bank );
914927 if (retval != ERROR_OK )
915928 return retval ;
916929
917930 retval = cfi_send_command (bank , 0x80 , flash_address (bank , 0 , pri_ext -> _unlock1 ));
918931 if (retval != ERROR_OK )
919932 return retval ;
920933
921- retval = cfi_send_command (bank , 0xaa , flash_address (bank , 0 , pri_ext -> _unlock1 ));
922- if (retval != ERROR_OK )
923- return retval ;
924-
925- retval = cfi_send_command (bank , 0x55 , flash_address (bank , 0 , pri_ext -> _unlock2 ));
934+ retval = cfi_spansion_unlock_seq (bank );
926935 if (retval != ERROR_OK )
927936 return retval ;
928937
@@ -2102,11 +2111,7 @@ static int cfi_spansion_write_word(struct flash_bank *bank, uint8_t *word, uint3
21022111 struct cfi_spansion_pri_ext * pri_ext = cfi_info -> pri_ext ;
21032112 struct target * target = bank -> target ;
21042113
2105- retval = cfi_send_command (bank , 0xaa , flash_address (bank , 0 , pri_ext -> _unlock1 ));
2106- if (retval != ERROR_OK )
2107- return retval ;
2108-
2109- retval = cfi_send_command (bank , 0x55 , flash_address (bank , 0 , pri_ext -> _unlock2 ));
2114+ retval = cfi_spansion_unlock_seq (bank );
21102115 if (retval != ERROR_OK )
21112116 return retval ;
21122117
@@ -2137,7 +2142,6 @@ static int cfi_spansion_write_words(struct flash_bank *bank, const uint8_t *word
21372142 int retval ;
21382143 struct cfi_flash_bank * cfi_info = bank -> driver_priv ;
21392144 struct target * target = bank -> target ;
2140- struct cfi_spansion_pri_ext * pri_ext = cfi_info -> pri_ext ;
21412145
21422146 /* Calculate buffer size and boundary mask
21432147 * buffersize is (buffer size per chip) * (number of chips)
@@ -2163,11 +2167,7 @@ static int cfi_spansion_write_words(struct flash_bank *bank, const uint8_t *word
21632167 }
21642168
21652169 /* Unlock */
2166- retval = cfi_send_command (bank , 0xaa , flash_address (bank , 0 , pri_ext -> _unlock1 ));
2167- if (retval != ERROR_OK )
2168- return retval ;
2169-
2170- retval = cfi_send_command (bank , 0x55 , flash_address (bank , 0 , pri_ext -> _unlock2 ));
2170+ retval = cfi_spansion_unlock_seq (bank );
21712171 if (retval != ERROR_OK )
21722172 return retval ;
21732173
@@ -2958,11 +2958,7 @@ static int cfi_spansion_protect_check(struct flash_bank *bank)
29582958 struct cfi_spansion_pri_ext * pri_ext = cfi_info -> pri_ext ;
29592959 int i ;
29602960
2961- retval = cfi_send_command (bank , 0xaa , flash_address (bank , 0 , pri_ext -> _unlock1 ));
2962- if (retval != ERROR_OK )
2963- return retval ;
2964-
2965- retval = cfi_send_command (bank , 0x55 , flash_address (bank , 0 , pri_ext -> _unlock2 ));
2961+ retval = cfi_spansion_unlock_seq (bank );
29662962 if (retval != ERROR_OK )
29672963 return retval ;
29682964
0 commit comments