+2009-07-15 Arnim Laeuger <arniml>
+
+ * src/flash/amd.c: [ 2806917 ] Atmel AT49BV322D flash support (MURANAKA Masaki)
+ Work around flash chips that support multi byte write mode with a
+ different programming algorithm.
+
2009-06-04 Arnim Laeuger <arniml>
* src/bsdl/bsdl_flex.l: force Base = DECIMAL for BOUNDARY_LENGTH attribute
printf( "Atmel" );
printf( _("\n\tChip: ") );
switch (cid) {
+ case 0x01c8:
+ printf( "AT49BV322D" );
+ break;
+ case 0x01c9:
+ printf( "AT49BV322DT" );
+ break;
case 0x01d2:
printf( "AT49BW642DT" );
break;
#endif
/* multi-byte writes supported? */
- if (max_bytes_write > 1)
- return amd_flash_program_buffer( cfi_array, adr, buffer, count );
+ if (max_bytes_write > 1) {
+ int result;
+ result = amd_flash_program_buffer( cfi_array, adr, buffer, count );
+ if (result == 0)
+ return 0;
+
+ /* Some flashes support max_bytes_write.
+ * But some of them don't support S29 style write buffer.
+ * See also the datasheet about AT49BV322D.
+ */
+ cfi->device_geometry.max_bytes_write = 1;
+ }
- else {
- /* unroll buffer to single writes */
- int idx;
+ /* unroll buffer to single writes */
+ int idx;
- for (idx = 0; idx < count; idx++) {
- int status = amd_flash_program_single( cfi_array, adr, buffer[idx] );
- if (status)
- return status;
- adr += cfi_array->bus_width;
- }
+ for (idx = 0; idx < count; idx++) {
+ int status = amd_flash_program_single( cfi_array, adr, buffer[idx] );
+ if (status)
+ return status;
+ adr += cfi_array->bus_width;
}
return 0;