diff options
-rw-r--r-- | arch/arm/plat-omap/include/plat/vram.h | 21 | ||||
-rw-r--r-- | drivers/video/omap2/dss/dispc.c | 1 | ||||
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb-ioctl.c | 2 | ||||
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb-main.c | 4 | ||||
-rw-r--r-- | drivers/video/omap2/vram.c | 99 |
5 files changed, 9 insertions, 118 deletions
diff --git a/arch/arm/plat-omap/include/plat/vram.h b/arch/arm/plat-omap/include/plat/vram.h index 0aa4ecd12c7d..4d65b7d06e6c 100644 --- a/arch/arm/plat-omap/include/plat/vram.h +++ b/arch/arm/plat-omap/include/plat/vram.h | |||
@@ -23,40 +23,21 @@ | |||
23 | 23 | ||
24 | #include <linux/types.h> | 24 | #include <linux/types.h> |
25 | 25 | ||
26 | #define OMAP_VRAM_MEMTYPE_SDRAM 0 | ||
27 | #define OMAP_VRAM_MEMTYPE_SRAM 1 | ||
28 | #define OMAP_VRAM_MEMTYPE_MAX 1 | ||
29 | |||
30 | extern int omap_vram_add_region(unsigned long paddr, size_t size); | 26 | extern int omap_vram_add_region(unsigned long paddr, size_t size); |
31 | extern int omap_vram_free(unsigned long paddr, size_t size); | 27 | extern int omap_vram_free(unsigned long paddr, size_t size); |
32 | extern int omap_vram_alloc(int mtype, size_t size, unsigned long *paddr); | 28 | extern int omap_vram_alloc(size_t size, unsigned long *paddr); |
33 | extern int omap_vram_reserve(unsigned long paddr, size_t size); | 29 | extern int omap_vram_reserve(unsigned long paddr, size_t size); |
34 | extern void omap_vram_get_info(unsigned long *vram, unsigned long *free_vram, | 30 | extern void omap_vram_get_info(unsigned long *vram, unsigned long *free_vram, |
35 | unsigned long *largest_free_block); | 31 | unsigned long *largest_free_block); |
36 | 32 | ||
37 | #ifdef CONFIG_OMAP2_VRAM | 33 | #ifdef CONFIG_OMAP2_VRAM |
38 | extern void omap_vram_set_sdram_vram(u32 size, u32 start); | 34 | extern void omap_vram_set_sdram_vram(u32 size, u32 start); |
39 | extern void omap_vram_set_sram_vram(u32 size, u32 start); | ||
40 | 35 | ||
41 | extern void omap_vram_reserve_sdram_memblock(void); | 36 | extern void omap_vram_reserve_sdram_memblock(void); |
42 | extern unsigned long omap_vram_reserve_sram(unsigned long sram_pstart, | ||
43 | unsigned long sram_vstart, | ||
44 | unsigned long sram_size, | ||
45 | unsigned long pstart_avail, | ||
46 | unsigned long size_avail); | ||
47 | #else | 37 | #else |
48 | static inline void omap_vram_set_sdram_vram(u32 size, u32 start) { } | 38 | static inline void omap_vram_set_sdram_vram(u32 size, u32 start) { } |
49 | static inline void omap_vram_set_sram_vram(u32 size, u32 start) { } | ||
50 | 39 | ||
51 | static inline void omap_vram_reserve_sdram_memblock(void) { } | 40 | static inline void omap_vram_reserve_sdram_memblock(void) { } |
52 | static inline unsigned long omap_vram_reserve_sram(unsigned long sram_pstart, | ||
53 | unsigned long sram_vstart, | ||
54 | unsigned long sram_size, | ||
55 | unsigned long pstart_avail, | ||
56 | unsigned long size_avail) | ||
57 | { | ||
58 | return 0; | ||
59 | } | ||
60 | #endif | 41 | #endif |
61 | 42 | ||
62 | #endif | 43 | #endif |
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c index e1626a1d5c45..0aecb680f8a7 100644 --- a/drivers/video/omap2/dss/dispc.c +++ b/drivers/video/omap2/dss/dispc.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include <linux/platform_device.h> | 37 | #include <linux/platform_device.h> |
38 | #include <linux/pm_runtime.h> | 38 | #include <linux/pm_runtime.h> |
39 | 39 | ||
40 | #include <plat/sram.h> | ||
41 | #include <plat/clock.h> | 40 | #include <plat/clock.h> |
42 | 41 | ||
43 | #include <video/omapdss.h> | 42 | #include <video/omapdss.h> |
diff --git a/drivers/video/omap2/omapfb/omapfb-ioctl.c b/drivers/video/omap2/omapfb/omapfb-ioctl.c index 16ba6196f330..6a09ef87e14f 100644 --- a/drivers/video/omap2/omapfb/omapfb-ioctl.c +++ b/drivers/video/omap2/omapfb/omapfb-ioctl.c | |||
@@ -215,7 +215,7 @@ static int omapfb_setup_mem(struct fb_info *fbi, struct omapfb_mem_info *mi) | |||
215 | int r = 0, i; | 215 | int r = 0, i; |
216 | size_t size; | 216 | size_t size; |
217 | 217 | ||
218 | if (mi->type > OMAPFB_MEMTYPE_MAX) | 218 | if (mi->type != OMAPFB_MEMTYPE_SDRAM) |
219 | return -EINVAL; | 219 | return -EINVAL; |
220 | 220 | ||
221 | size = PAGE_ALIGN(mi->size); | 221 | size = PAGE_ALIGN(mi->size); |
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c index ce158311ff59..17e7320b48d5 100644 --- a/drivers/video/omap2/omapfb/omapfb-main.c +++ b/drivers/video/omap2/omapfb/omapfb-main.c | |||
@@ -1399,7 +1399,7 @@ static int omapfb_alloc_fbmem(struct fb_info *fbi, unsigned long size, | |||
1399 | 1399 | ||
1400 | if (!paddr) { | 1400 | if (!paddr) { |
1401 | DBG("allocating %lu bytes for fb %d\n", size, ofbi->id); | 1401 | DBG("allocating %lu bytes for fb %d\n", size, ofbi->id); |
1402 | r = omap_vram_alloc(OMAP_VRAM_MEMTYPE_SDRAM, size, &paddr); | 1402 | r = omap_vram_alloc(size, &paddr); |
1403 | } else { | 1403 | } else { |
1404 | DBG("reserving %lu bytes at %lx for fb %d\n", size, paddr, | 1404 | DBG("reserving %lu bytes at %lx for fb %d\n", size, paddr, |
1405 | ofbi->id); | 1405 | ofbi->id); |
@@ -1669,7 +1669,7 @@ int omapfb_realloc_fbmem(struct fb_info *fbi, unsigned long size, int type) | |||
1669 | int old_type = rg->type; | 1669 | int old_type = rg->type; |
1670 | int r; | 1670 | int r; |
1671 | 1671 | ||
1672 | if (type > OMAPFB_MEMTYPE_MAX) | 1672 | if (type != OMAPFB_MEMTYPE_SDRAM) |
1673 | return -EINVAL; | 1673 | return -EINVAL; |
1674 | 1674 | ||
1675 | size = PAGE_ALIGN(size); | 1675 | size = PAGE_ALIGN(size); |
diff --git a/drivers/video/omap2/vram.c b/drivers/video/omap2/vram.c index 9441e2eb3dee..87e421e25afe 100644 --- a/drivers/video/omap2/vram.c +++ b/drivers/video/omap2/vram.c | |||
@@ -33,7 +33,6 @@ | |||
33 | 33 | ||
34 | #include <asm/setup.h> | 34 | #include <asm/setup.h> |
35 | 35 | ||
36 | #include <plat/sram.h> | ||
37 | #include <plat/vram.h> | 36 | #include <plat/vram.h> |
38 | #include <plat/dma.h> | 37 | #include <plat/dma.h> |
39 | 38 | ||
@@ -43,10 +42,6 @@ | |||
43 | #define DBG(format, ...) | 42 | #define DBG(format, ...) |
44 | #endif | 43 | #endif |
45 | 44 | ||
46 | #define OMAP2_SRAM_START 0x40200000 | ||
47 | /* Maximum size, in reality this is smaller if SRAM is partially locked. */ | ||
48 | #define OMAP2_SRAM_SIZE 0xa0000 /* 640k */ | ||
49 | |||
50 | /* postponed regions are used to temporarily store region information at boot | 45 | /* postponed regions are used to temporarily store region information at boot |
51 | * time when we cannot yet allocate the region list */ | 46 | * time when we cannot yet allocate the region list */ |
52 | #define MAX_POSTPONED_REGIONS 10 | 47 | #define MAX_POSTPONED_REGIONS 10 |
@@ -74,15 +69,6 @@ struct vram_region { | |||
74 | static DEFINE_MUTEX(region_mutex); | 69 | static DEFINE_MUTEX(region_mutex); |
75 | static LIST_HEAD(region_list); | 70 | static LIST_HEAD(region_list); |
76 | 71 | ||
77 | static inline int region_mem_type(unsigned long paddr) | ||
78 | { | ||
79 | if (paddr >= OMAP2_SRAM_START && | ||
80 | paddr < OMAP2_SRAM_START + OMAP2_SRAM_SIZE) | ||
81 | return OMAP_VRAM_MEMTYPE_SRAM; | ||
82 | else | ||
83 | return OMAP_VRAM_MEMTYPE_SDRAM; | ||
84 | } | ||
85 | |||
86 | static struct vram_region *omap_vram_create_region(unsigned long paddr, | 72 | static struct vram_region *omap_vram_create_region(unsigned long paddr, |
87 | unsigned pages) | 73 | unsigned pages) |
88 | { | 74 | { |
@@ -212,9 +198,6 @@ static int _omap_vram_reserve(unsigned long paddr, unsigned pages) | |||
212 | 198 | ||
213 | DBG("checking region %lx %d\n", rm->paddr, rm->pages); | 199 | DBG("checking region %lx %d\n", rm->paddr, rm->pages); |
214 | 200 | ||
215 | if (region_mem_type(rm->paddr) != region_mem_type(paddr)) | ||
216 | continue; | ||
217 | |||
218 | start = rm->paddr; | 201 | start = rm->paddr; |
219 | end = start + (rm->pages << PAGE_SHIFT) - 1; | 202 | end = start + (rm->pages << PAGE_SHIFT) - 1; |
220 | if (start > paddr || end < paddr + size - 1) | 203 | if (start > paddr || end < paddr + size - 1) |
@@ -320,7 +303,7 @@ err: | |||
320 | return r; | 303 | return r; |
321 | } | 304 | } |
322 | 305 | ||
323 | static int _omap_vram_alloc(int mtype, unsigned pages, unsigned long *paddr) | 306 | static int _omap_vram_alloc(unsigned pages, unsigned long *paddr) |
324 | { | 307 | { |
325 | struct vram_region *rm; | 308 | struct vram_region *rm; |
326 | struct vram_alloc *alloc; | 309 | struct vram_alloc *alloc; |
@@ -330,9 +313,6 @@ static int _omap_vram_alloc(int mtype, unsigned pages, unsigned long *paddr) | |||
330 | 313 | ||
331 | DBG("checking region %lx %d\n", rm->paddr, rm->pages); | 314 | DBG("checking region %lx %d\n", rm->paddr, rm->pages); |
332 | 315 | ||
333 | if (region_mem_type(rm->paddr) != mtype) | ||
334 | continue; | ||
335 | |||
336 | start = rm->paddr; | 316 | start = rm->paddr; |
337 | 317 | ||
338 | list_for_each_entry(alloc, &rm->alloc_list, list) { | 318 | list_for_each_entry(alloc, &rm->alloc_list, list) { |
@@ -365,21 +345,21 @@ found: | |||
365 | return -ENOMEM; | 345 | return -ENOMEM; |
366 | } | 346 | } |
367 | 347 | ||
368 | int omap_vram_alloc(int mtype, size_t size, unsigned long *paddr) | 348 | int omap_vram_alloc(size_t size, unsigned long *paddr) |
369 | { | 349 | { |
370 | unsigned pages; | 350 | unsigned pages; |
371 | int r; | 351 | int r; |
372 | 352 | ||
373 | BUG_ON(mtype > OMAP_VRAM_MEMTYPE_MAX || !size); | 353 | BUG_ON(!size); |
374 | 354 | ||
375 | DBG("alloc mem type %d size %d\n", mtype, size); | 355 | DBG("alloc mem size %d\n", size); |
376 | 356 | ||
377 | size = PAGE_ALIGN(size); | 357 | size = PAGE_ALIGN(size); |
378 | pages = size >> PAGE_SHIFT; | 358 | pages = size >> PAGE_SHIFT; |
379 | 359 | ||
380 | mutex_lock(®ion_mutex); | 360 | mutex_lock(®ion_mutex); |
381 | 361 | ||
382 | r = _omap_vram_alloc(mtype, pages, paddr); | 362 | r = _omap_vram_alloc(pages, paddr); |
383 | 363 | ||
384 | mutex_unlock(®ion_mutex); | 364 | mutex_unlock(®ion_mutex); |
385 | 365 | ||
@@ -501,10 +481,6 @@ arch_initcall(omap_vram_init); | |||
501 | /* boottime vram alloc stuff */ | 481 | /* boottime vram alloc stuff */ |
502 | 482 | ||
503 | /* set from board file */ | 483 | /* set from board file */ |
504 | static u32 omap_vram_sram_start __initdata; | ||
505 | static u32 omap_vram_sram_size __initdata; | ||
506 | |||
507 | /* set from board file */ | ||
508 | static u32 omap_vram_sdram_start __initdata; | 484 | static u32 omap_vram_sdram_start __initdata; |
509 | static u32 omap_vram_sdram_size __initdata; | 485 | static u32 omap_vram_sdram_size __initdata; |
510 | 486 | ||
@@ -587,73 +563,8 @@ void __init omap_vram_reserve_sdram_memblock(void) | |||
587 | pr_info("Reserving %u bytes SDRAM for VRAM\n", size); | 563 | pr_info("Reserving %u bytes SDRAM for VRAM\n", size); |
588 | } | 564 | } |
589 | 565 | ||
590 | /* | ||
591 | * Called at sram init time, before anything is pushed to the SRAM stack. | ||
592 | * Because of the stack scheme, we will allocate everything from the | ||
593 | * start of the lowest address region to the end of SRAM. This will also | ||
594 | * include padding for page alignment and possible holes between regions. | ||
595 | * | ||
596 | * As opposed to the SDRAM case, we'll also do any dynamic allocations at | ||
597 | * this point, since the driver built as a module would have problem with | ||
598 | * freeing / reallocating the regions. | ||
599 | */ | ||
600 | unsigned long __init omap_vram_reserve_sram(unsigned long sram_pstart, | ||
601 | unsigned long sram_vstart, | ||
602 | unsigned long sram_size, | ||
603 | unsigned long pstart_avail, | ||
604 | unsigned long size_avail) | ||
605 | { | ||
606 | unsigned long pend_avail; | ||
607 | unsigned long reserved; | ||
608 | u32 paddr; | ||
609 | u32 size; | ||
610 | |||
611 | paddr = omap_vram_sram_start; | ||
612 | size = omap_vram_sram_size; | ||
613 | |||
614 | if (!size) | ||
615 | return 0; | ||
616 | |||
617 | reserved = 0; | ||
618 | pend_avail = pstart_avail + size_avail; | ||
619 | |||
620 | if (!paddr) { | ||
621 | /* Dynamic allocation */ | ||
622 | if ((size_avail & PAGE_MASK) < size) { | ||
623 | pr_err("Not enough SRAM for VRAM\n"); | ||
624 | return 0; | ||
625 | } | ||
626 | size_avail = (size_avail - size) & PAGE_MASK; | ||
627 | paddr = pstart_avail + size_avail; | ||
628 | } | ||
629 | |||
630 | if (paddr < sram_pstart || | ||
631 | paddr + size > sram_pstart + sram_size) { | ||
632 | pr_err("Illegal SRAM region for VRAM\n"); | ||
633 | return 0; | ||
634 | } | ||
635 | |||
636 | /* Reserve everything above the start of the region. */ | ||
637 | if (pend_avail - paddr > reserved) | ||
638 | reserved = pend_avail - paddr; | ||
639 | size_avail = pend_avail - reserved - pstart_avail; | ||
640 | |||
641 | omap_vram_add_region(paddr, size); | ||
642 | |||
643 | if (reserved) | ||
644 | pr_info("Reserving %lu bytes SRAM for VRAM\n", reserved); | ||
645 | |||
646 | return reserved; | ||
647 | } | ||
648 | |||
649 | void __init omap_vram_set_sdram_vram(u32 size, u32 start) | 566 | void __init omap_vram_set_sdram_vram(u32 size, u32 start) |
650 | { | 567 | { |
651 | omap_vram_sdram_start = start; | 568 | omap_vram_sdram_start = start; |
652 | omap_vram_sdram_size = size; | 569 | omap_vram_sdram_size = size; |
653 | } | 570 | } |
654 | |||
655 | void __init omap_vram_set_sram_vram(u32 size, u32 start) | ||
656 | { | ||
657 | omap_vram_sram_start = start; | ||
658 | omap_vram_sram_size = size; | ||
659 | } | ||