From c0456362c30dbd8af19c827ab45b958db3208333 Mon Sep 17 00:00:00 2001 From: Huang Shijie Date: Thu, 13 Sep 2012 14:58:00 +0800 Subject: [PATCH] --- yaml --- r: 332773 b: refs/heads/master c: 9c95f11b9e743aa6134134a6dcf866a9d5661972 h: refs/heads/master i: 332771: 8021bcc45980e310ea1d20f51ab2bf00e7a1796c v: v3 --- [refs] | 2 +- trunk/drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 8 ++++++++ trunk/drivers/mtd/nand/gpmi-nand/gpmi-nand.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 8af48ec6abfa..933b03b49dd8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 995fbbf563fcec058a1135bdd112ac969c817e65 +refs/heads/master: 9c95f11b9e743aa6134134a6dcf866a9d5661972 diff --git a/trunk/drivers/mtd/nand/gpmi-nand/gpmi-lib.c b/trunk/drivers/mtd/nand/gpmi-nand/gpmi-lib.c index c036e51f3200..3502accd4bc3 100644 --- a/trunk/drivers/mtd/nand/gpmi-nand/gpmi-lib.c +++ b/trunk/drivers/mtd/nand/gpmi-nand/gpmi-lib.c @@ -914,6 +914,9 @@ static int enable_edo_mode(struct gpmi_nand_data *this, int mode) rate = (mode == 5) ? 100000000 : 80000000; clk_set_rate(r->clock[0], rate); + /* Let the gpmi_begin() re-compute the timing again. */ + this->flags &= ~GPMI_TIMING_INIT_OK; + this->flags |= GPMI_ASYNC_EDO_ENABLED; this->timing_mode = mode; dev_info(this->dev, "enable the asynchronous EDO mode %d\n", mode); @@ -964,6 +967,11 @@ void gpmi_begin(struct gpmi_nand_data *this) goto err_out; } + /* Only initialize the timing once */ + if (this->flags & GPMI_TIMING_INIT_OK) + return; + this->flags |= GPMI_TIMING_INIT_OK; + if (this->flags & GPMI_ASYNC_EDO_ENABLED) gpmi_compute_edo_timing(this, &hw); else diff --git a/trunk/drivers/mtd/nand/gpmi-nand/gpmi-nand.h b/trunk/drivers/mtd/nand/gpmi-nand/gpmi-nand.h index 5b6d546711a6..7ac25c1e58f9 100644 --- a/trunk/drivers/mtd/nand/gpmi-nand/gpmi-nand.h +++ b/trunk/drivers/mtd/nand/gpmi-nand/gpmi-nand.h @@ -124,6 +124,7 @@ struct nand_timing { struct gpmi_nand_data { /* flags */ #define GPMI_ASYNC_EDO_ENABLED (1 << 0) +#define GPMI_TIMING_INIT_OK (1 << 1) int flags; /* System Interface */