DSS2: VRAM: improve omap_vram_add_region()
authorTomi Valkeinen <tomi.valkeinen@nokia.com>
Thu, 16 Apr 2009 14:56:00 +0000 (17:56 +0300)
committerGrazvydas Ignotas <notasas@gmail.com>
Fri, 1 May 2009 16:45:06 +0000 (19:45 +0300)
Combine postponed and non-posponed versions of omap_vram_add_region.
Make the func non-static, so it can be called from board files.

arch/arm/plat-omap/include/mach/vram.h
arch/arm/plat-omap/vram.c

index f176562..8639e08 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <asm/types.h>
 
+extern int omap_vram_add_region(unsigned long paddr, size_t size);
 extern int omap_vram_free(unsigned long paddr, size_t size);
 extern int omap_vram_alloc(int mtype, size_t size, unsigned long *paddr);
 extern int omap_vram_reserve(unsigned long paddr, size_t size);
index 520f260..8e9fe77 100644 (file)
@@ -60,6 +60,7 @@
  * time when we cannot yet allocate the region list */
 #define MAX_POSTPONED_REGIONS 10
 
+static bool vram_initialized;
 static int postponed_cnt __initdata;
 static struct {
        unsigned long paddr;
@@ -145,39 +146,32 @@ static void omap_vram_free_allocation(struct vram_alloc *va)
        kfree(va);
 }
 
-static __init int omap_vram_add_region_postponed(unsigned long paddr,
-               size_t size)
-{
-       if (postponed_cnt == MAX_POSTPONED_REGIONS)
-               return -ENOMEM;
-
-       postponed_regions[postponed_cnt].paddr = paddr;
-       postponed_regions[postponed_cnt].size = size;
-
-       ++postponed_cnt;
-
-       return 0;
-}
-
-/* add/remove_region can be exported if there's need to add/remove regions
- * runtime */
-static int omap_vram_add_region(unsigned long paddr, size_t size)
+int omap_vram_add_region(unsigned long paddr, size_t size)
 {
        struct vram_region *rm;
        unsigned pages;
 
-       DBG("adding region paddr %08lx size %d\n",
-                       paddr, size);
+       if (vram_initialized) {
+               DBG("adding region paddr %08lx size %d\n",
+                               paddr, size);
 
-       size &= PAGE_MASK;
-       pages = size >> PAGE_SHIFT;
+               size &= PAGE_MASK;
+               pages = size >> PAGE_SHIFT;
 
-       rm = omap_vram_create_region(paddr, pages);
-       if (rm == NULL)
-               return -ENOMEM;
+               rm = omap_vram_create_region(paddr, pages);
+               if (rm == NULL)
+                       return -ENOMEM;
+
+               list_add(&rm->list, &region_list);
+       } else {
+               if (postponed_cnt == MAX_POSTPONED_REGIONS)
+                       return -ENOMEM;
 
-       list_add(&rm->list, &region_list);
+               postponed_regions[postponed_cnt].paddr = paddr;
+               postponed_regions[postponed_cnt].size = size;
 
+               ++postponed_cnt;
+       }
        return 0;
 }
 
@@ -438,6 +432,8 @@ static __init int omap_vram_init(void)
 {
        int i, r;
 
+       vram_initialized = 1;
+
        for (i = 0; i < postponed_cnt; i++)
                omap_vram_add_region(postponed_regions[i].paddr,
                                postponed_regions[i].size);
@@ -472,10 +468,6 @@ static void __init omapfb_early_vram(char **p)
        omapfb_def_sdram_vram_size = memparse(*p, p);
        if (**p == ',')
                omapfb_def_sdram_vram_start = simple_strtoul((*p) + 1, p, 16);
-
-       printk("omapfb_early_vram, %d, 0x%x\n",
-                       omapfb_def_sdram_vram_size,
-                       omapfb_def_sdram_vram_start);
 }
 __early_param("vram=", omapfb_early_vram);
 
@@ -538,7 +530,7 @@ void __init omapfb_reserve_sdram(void)
                BUG_ON(paddr & ~PAGE_MASK);
        }
 
-       omap_vram_add_region_postponed(paddr, size);
+       omap_vram_add_region(paddr, size);
 
        pr_info("Reserving %u bytes SDRAM for VRAM\n", size);
 }
@@ -594,7 +586,7 @@ unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart,
                reserved = pend_avail - paddr;
        size_avail = pend_avail - reserved - pstart_avail;
 
-       omap_vram_add_region_postponed(paddr, size);
+       omap_vram_add_region(paddr, size);
 
        if (reserved)
                pr_info("Reserving %lu bytes SRAM for VRAM\n", reserved);