Combine postponed and non-posponed versions of omap_vram_add_region.
Make the func non-static, so it can be called from board files.
+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);
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);
* time when we cannot yet allocate the region list */
#define MAX_POSTPONED_REGIONS 10
* 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;
static int postponed_cnt __initdata;
static struct {
unsigned long paddr;
-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;
{
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, ®ion_list);
+ } else {
+ if (postponed_cnt == MAX_POSTPONED_REGIONS)
+ return -ENOMEM;
- list_add(&rm->list, ®ion_list);
+ postponed_regions[postponed_cnt].paddr = paddr;
+ postponed_regions[postponed_cnt].size = size;
+ vram_initialized = 1;
+
for (i = 0; i < postponed_cnt; i++)
omap_vram_add_region(postponed_regions[i].paddr,
postponed_regions[i].size);
for (i = 0; i < postponed_cnt; i++)
omap_vram_add_region(postponed_regions[i].paddr,
postponed_regions[i].size);
omapfb_def_sdram_vram_size = memparse(*p, p);
if (**p == ',')
omapfb_def_sdram_vram_start = simple_strtoul((*p) + 1, p, 16);
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);
}
__early_param("vram=", omapfb_early_vram);
BUG_ON(paddr & ~PAGE_MASK);
}
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);
}
pr_info("Reserving %u bytes SDRAM for VRAM\n", size);
}
reserved = pend_avail - paddr;
size_avail = pend_avail - reserved - pstart_avail;
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);
if (reserved)
pr_info("Reserving %lu bytes SRAM for VRAM\n", reserved);