aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert ABEL <rabel@cit-ec.uni-bielefeld.de>2015-02-27 10:56:52 -0500
committerRoger Quadros <rogerq@ti.com>2015-03-06 05:35:45 -0500
commitf585070b91950a0269eb20f497cceeee0aeefe0e (patch)
treef22d10e02b3c01ce86d1ad8961d1bcf184a1760c
parent563dbb260d74dbd49d66f9a07e0311563c62c8ff (diff)
ARM OMAP2+ GPMC: always program GPMCFCLKDIVIDER
The WAITMONITORINGTIME is expressed as a number of GPMC_CLK clock cycles, even though the access is defined as asynchronous, and no GPMC_CLK clock is provided to the external device. Still, GPMCFCLKDIVIDER is used as a divider for the GPMC clock, so it must be programmed to define the correct WAITMONITORINGTIME delay. Signed-off-by: Robert ABEL <rabel@cit-ec.uni-bielefeld.de> Acked-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Roger Quadros <rogerq@ti.com>
-rw-r--r--drivers/memory/omap-gpmc.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
index 6a35971cb724..5c36ff397b73 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
@@ -508,7 +508,7 @@ static int set_gpmc_timing_reg(int cs, int reg, int st_bit, int end_bit,
508 508
509 l = gpmc_cs_read_reg(cs, reg); 509 l = gpmc_cs_read_reg(cs, reg);
510#ifdef DEBUG 510#ifdef DEBUG
511 printk(KERN_INFO 511 pr_info(
512 "GPMC CS%d: %-17s: %3d ticks, %3lu ns (was %3i ticks) %3d ns\n", 512 "GPMC CS%d: %-17s: %3d ticks, %3lu ns (was %3i ticks) %3d ns\n",
513 cs, name, ticks, gpmc_get_fclk_period() * ticks / 1000, 513 cs, name, ticks, gpmc_get_fclk_period() * ticks / 1000,
514 (l >> st_bit) & mask, time); 514 (l >> st_bit) & mask, time);
@@ -580,19 +580,14 @@ int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t)
580 if (gpmc_capability & GPMC_HAS_WR_ACCESS) 580 if (gpmc_capability & GPMC_HAS_WR_ACCESS)
581 GPMC_SET_ONE(GPMC_CS_CONFIG6, 24, 28, wr_access); 581 GPMC_SET_ONE(GPMC_CS_CONFIG6, 24, 28, wr_access);
582 582
583 /* caller is expected to have initialized CONFIG1 to cover
584 * at least sync vs async
585 */
586 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1); 583 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1);
587 if (l & (GPMC_CONFIG1_READTYPE_SYNC | GPMC_CONFIG1_WRITETYPE_SYNC)) {
588#ifdef DEBUG 584#ifdef DEBUG
589 printk(KERN_INFO "GPMC CS%d CLK period is %lu ns (div %d)\n", 585 pr_info("GPMC CS%d CLK period is %lu ns (div %d)\n",
590 cs, (div * gpmc_get_fclk_period()) / 1000, div); 586 cs, (div * gpmc_get_fclk_period()) / 1000, div);
591#endif 587#endif
592 l &= ~0x03; 588 l &= ~0x03;
593 l |= (div - 1); 589 l |= (div - 1);
594 gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, l); 590 gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, l);
595 }
596 591
597 gpmc_cs_bool_timings(cs, &t->bool_timings); 592 gpmc_cs_bool_timings(cs, &t->bool_timings);
598 gpmc_cs_show_timings(cs, "after gpmc_cs_set_timings"); 593 gpmc_cs_show_timings(cs, "after gpmc_cs_set_timings");