lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 16 Jul 2014 07:19:28 +0000 From: Bean Huo <beanhuo@...look.com> To: "dwmw2@...radead.org" <dwmw2@...radead.org>, "computersforpeace@...il.com" <computersforpeace@...il.com> CC: "paul.gortmaker@...driver.com" <paul.gortmaker@...driver.com>, "jg1.han@...sung.com" <jg1.han@...sung.com>, "artem.bityutskiy@...ux.intel.com" <artem.bityutskiy@...ux.intel.com>, "b32955@...escale.com" <b32955@...escale.com>, "linux-mtd@...ts.infradead.org" <linux-mtd@...ts.infradead.org>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, "christian.riesch@...cron.at" <christian.riesch@...cron.at> Subject: [PATCH v5] mtd:nor:timeout:fix do_write_buffer() timeout error For some Norflashes,the size of the buffer program has been increased from 256 bytes to 512 bytes,2ms maximum timeout can not adapt to all the different vendor's norflash.There maximum timeout information in the CFI area,so the best way is to choose the result calculated according to timeout field of struct cfi_ident that probed from norflash's CFI aera.This is also a standard defined by CFI.If haven't probed this information,or smaller than 2000us,then specify a defualt value 2000us. Tested with Micron JS28F512M29EWx and Micron MT28EW512ABA flash devices. Signed-off-by: bean huo <beanhuo@...look.com> --- changes v1->v2:Deleted unused parameters in this patch (word_write_time_max and erase_time_max).Using usecs_to_jiffies instead of msecs_to_jiffies for convert timeout value into jiffies. v2->v3:Removed unnecessary messages form comments and deleted trailing whitespace. V3->v4:If haven't probed timeout information,or smaller than 2000us,specify default 2000us. v4->v5:add one whitespace drivers/mtd/chips/cfi_cmdset_0002.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c index e21fde9..c248a8c 100644 --- a/drivers/mtd/chips/cfi_cmdset_0002.c +++ b/drivers/mtd/chips/cfi_cmdset_0002.c @@ -628,6 +628,24 @@ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary) cfi->chips[i].word_write_time = 1<<cfi->cfiq->WordWriteTimeoutTyp; cfi->chips[i].buffer_write_time = 1<<cfi->cfiq->BufWriteTimeoutTyp; cfi->chips[i].erase_time = 1<<cfi->cfiq->BlockEraseTimeoutTyp; + /* + * First calculate the timeout max according to timeout + * field of struct cfi_ident that probed from chip's CFI + * aera.If haven't probed this information,or smaller than + * 2000us,we will specify defualt value 2000us,and the time + * unit is us. + */ + if (cfi->cfiq->BufWriteTimeoutTyp && + cfi->cfiq->BufWriteTimeoutMax){ + cfi->chips[i].buffer_write_time_max = + 1<<(cfi->cfiq->BufWriteTimeoutTyp + + cfi->cfiq->BufWriteTimeoutMax); + } else { + cfi->chips[i].buffer_write_time_max = 0; + } + cfi->chips[i].buffer_write_time_max = + ((cfi->chips[i].buffer_write_time_max>= 2000) + ? cfi->chips[i].buffer_write_time_max : 2000); cfi->chips[i].ref_point_counter = 0; init_waitqueue_head(&(cfi->chips[i].wq)); } @@ -1462,8 +1480,14 @@ static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip, { struct cfi_private *cfi = map->fldrv_priv; unsigned long timeo = jiffies + HZ; - /* see comments in do_write_oneword() regarding uWriteTimeo. */ - unsigned long uWriteTimeout = ( HZ / 1000 ) + 1; + /* + * Use the result that calculated according to timeout field + * of struct cfi_ident that probed from norflash's CFI aera. + * See more comments in cfi_cmdset_0002().uWriteTimeout is + * used for timeout step,it must be concerted into jiffies. + */ + unsigned long uWriteTimeout = + usecs_to_jiffies(chip->buffer_write_time_max); int ret = -EIO; unsigned long cmd_adr; int z, words; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists