aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/chips/cfi_cmdset_0002.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
index bf313be6ee26..5a4bfe33112a 100644
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
@@ -645,6 +645,23 @@ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)
645 cfi->chips[i].word_write_time = 1<<cfi->cfiq->WordWriteTimeoutTyp; 645 cfi->chips[i].word_write_time = 1<<cfi->cfiq->WordWriteTimeoutTyp;
646 cfi->chips[i].buffer_write_time = 1<<cfi->cfiq->BufWriteTimeoutTyp; 646 cfi->chips[i].buffer_write_time = 1<<cfi->cfiq->BufWriteTimeoutTyp;
647 cfi->chips[i].erase_time = 1<<cfi->cfiq->BlockEraseTimeoutTyp; 647 cfi->chips[i].erase_time = 1<<cfi->cfiq->BlockEraseTimeoutTyp;
648 /*
649 * First calculate the timeout max according to timeout field
650 * of struct cfi_ident that probed from chip's CFI aera, if
651 * available. Specify a minimum of 2000us, in case the CFI data
652 * is wrong.
653 */
654 if (cfi->cfiq->BufWriteTimeoutTyp &&
655 cfi->cfiq->BufWriteTimeoutMax)
656 cfi->chips[i].buffer_write_time_max =
657 1 << (cfi->cfiq->BufWriteTimeoutTyp +
658 cfi->cfiq->BufWriteTimeoutMax);
659 else
660 cfi->chips[i].buffer_write_time_max = 0;
661
662 cfi->chips[i].buffer_write_time_max =
663 max(cfi->chips[i].buffer_write_time_max, 2000);
664
648 cfi->chips[i].ref_point_counter = 0; 665 cfi->chips[i].ref_point_counter = 0;
649 init_waitqueue_head(&(cfi->chips[i].wq)); 666 init_waitqueue_head(&(cfi->chips[i].wq));
650 } 667 }
@@ -1774,8 +1791,12 @@ static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
1774{ 1791{
1775 struct cfi_private *cfi = map->fldrv_priv; 1792 struct cfi_private *cfi = map->fldrv_priv;
1776 unsigned long timeo = jiffies + HZ; 1793 unsigned long timeo = jiffies + HZ;
1777 /* see comments in do_write_oneword() regarding uWriteTimeo. */ 1794 /*
1778 unsigned long uWriteTimeout = ( HZ / 1000 ) + 1; 1795 * Timeout is calculated according to CFI data, if available.
1796 * See more comments in cfi_cmdset_0002().
1797 */
1798 unsigned long uWriteTimeout =
1799 usecs_to_jiffies(chip->buffer_write_time_max);
1779 int ret = -EIO; 1800 int ret = -EIO;
1780 unsigned long cmd_adr; 1801 unsigned long cmd_adr;
1781 int z, words; 1802 int z, words;