Skip to content

Commit

Permalink
mtd: gpmi: initialize the timing registers only one time
Browse files Browse the repository at this point in the history
The current code initializes the timing registers at very time
we call the gpmi_begin(). This really wastes the cpu cycles.

Add a new flag to let the gpmi driver initializes the timing registers
only one time.

Signed-off-by: Huang Shijie <b32955@freescale.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
Huang Shijie authored and David Woodhouse committed Sep 29, 2012
1 parent 995fbbf commit 9c95f11
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/mtd/nand/gpmi-nand/gpmi-lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions drivers/mtd/nand/gpmi-nand/gpmi-nand.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 9c95f11

Please sign in to comment.