aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap1
diff options
context:
space:
mode:
authorPaul Parsons <lost.distance@yahoo.com>2012-03-07 09:12:08 -0500
committerDavid Woodhouse <David.Woodhouse@intel.com>2012-03-26 19:52:28 -0400
commit876fe76d793d03077eb61ba3afab4a383f46c554 (patch)
treefb7d98bd746ebd1c3c5919f10a998e8f2dbd9e8b /arch/arm/mach-omap1
parente7d9377e0440c25805dcc5b0af189a87beb69f5e (diff)
mtd: maps: physmap: Add reference counter to set_vpp()
This patch is part of a set which fixes unnecessary flash erase and write errors resulting from the MTD CFI driver turning off vpp while an erase is in progress. This patch allows physmap_set_vpp() calls to be nested by adding a reference counter. omap1_set_vpp() already used a reference counter. Since it is called from physmap_set_vpp(), omap1_set_vpp() can now be simplified. simtec_nor_vpp() already disabled hard interrupts. Since it is called from physmap_set_vpp(), simtec_nor_vpp() can now be simplified. Signed-off-by: Paul Parsons <lost.distance@yahoo.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'arch/arm/mach-omap1')
-rw-r--r--arch/arm/mach-omap1/flash.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/arch/arm/mach-omap1/flash.c b/arch/arm/mach-omap1/flash.c
index 1749cb37dda0..4665bfcd2ce9 100644
--- a/arch/arm/mach-omap1/flash.c
+++ b/arch/arm/mach-omap1/flash.c
@@ -15,20 +15,12 @@
15 15
16void omap1_set_vpp(struct platform_device *pdev, int enable) 16void omap1_set_vpp(struct platform_device *pdev, int enable)
17{ 17{
18 static int count;
19 u32 l; 18 u32 l;
20 19
21 if (enable) { 20 l = omap_readl(EMIFS_CONFIG);
22 if (count++ == 0) { 21 if (enable)
23 l = omap_readl(EMIFS_CONFIG); 22 l |= OMAP_EMIFS_CONFIG_WP;
24 l |= OMAP_EMIFS_CONFIG_WP; 23 else
25 omap_writel(l, EMIFS_CONFIG); 24 l &= ~OMAP_EMIFS_CONFIG_WP;
26 } 25 omap_writel(l, EMIFS_CONFIG);
27 } else {
28 if (count && (--count == 0)) {
29 l = omap_readl(EMIFS_CONFIG);
30 l &= ~OMAP_EMIFS_CONFIG_WP;
31 omap_writel(l, EMIFS_CONFIG);
32 }
33 }
34} 26}