]> git.sur5r.net Git - u-boot/blobdiff - drivers/mtd/altera_qspi.c
serial: Move carriage return before line feed for some serial drivers
[u-boot] / drivers / mtd / altera_qspi.c
index 8a630a66d627a470496fe3d6278bf5de9f9beb75..a9148a7fe41f0f0e4af4b66a0aa3ca94c3059f6d 100644 (file)
@@ -5,6 +5,7 @@
  */
 
 #include <common.h>
+#include <console.h>
 #include <dm.h>
 #include <errno.h>
 #include <fdt_support.h>
@@ -52,6 +53,7 @@ struct altera_qspi_platdata {
        unsigned long size;
 };
 
+static uint flash_verbose;
 flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];   /* FLASH chips info */
 
 static void altera_qspi_get_locked_range(struct mtd_info *mtd, loff_t *ofs,
@@ -74,6 +76,11 @@ void flash_print_info(flash_info_t *info)
        putc('\n');
 }
 
+void flash_set_verbose(uint v)
+{
+       flash_verbose = v;
+}
+
 int flash_erase(flash_info_t *info, int s_first, int s_last)
 {
        struct mtd_info *mtd = info->mtd;
@@ -84,10 +91,13 @@ int flash_erase(flash_info_t *info, int s_first, int s_last)
        instr.mtd = mtd;
        instr.addr = mtd->erasesize * s_first;
        instr.len = mtd->erasesize * (s_last + 1 - s_first);
+       flash_set_verbose(1);
        ret = mtd_erase(mtd, &instr);
+       flash_set_verbose(0);
        if (ret)
                return ERR_PROTECTED;
 
+       puts(" done\n");
        return 0;
 }
 
@@ -136,6 +146,14 @@ static int altera_qspi_erase(struct mtd_info *mtd, struct erase_info *instr)
        instr->state = MTD_ERASING;
        addr &= ~(mtd->erasesize - 1); /* get lower aligned address */
        while (addr < end) {
+               if (ctrlc()) {
+                       if (flash_verbose)
+                               putc('\n');
+                       instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN;
+                       instr->state = MTD_ERASE_FAILED;
+                       mtd_erase_callback(instr);
+                       return -EIO;
+               }
                flash = pdata->base + addr;
                last = pdata->base + addr + mtd->erasesize;
                /* skip erase if sector is blank */
@@ -160,6 +178,11 @@ static int altera_qspi_erase(struct mtd_info *mtd, struct erase_info *instr)
                                mtd_erase_callback(instr);
                                return -EIO;
                        }
+                       if (flash_verbose)
+                               putc('.');
+               } else {
+                       if (flash_verbose)
+                               putc(',');
                }
                addr += mtd->erasesize;
        }