Skip to content

Commit

Permalink
Merge branch '3.8/vram-conversion' of git://gitorious.org/linux-omap-…
Browse files Browse the repository at this point in the history
…dss2/linux

Conflicts:
	drivers/video/omap2/dss/Kconfig
	drivers/video/omap2/omapfb/omapfb-ioctl.c
	drivers/video/omap2/omapfb/omapfb-main.c

Merge changes to make omapfb use common dma_alloc, and remove omap's
custom vram allocator.
  • Loading branch information
Tomi Valkeinen committed Nov 16, 2012
2 parents 3c3dd22 + 966458f commit dcca5cf
Show file tree
Hide file tree
Showing 14 changed files with 55 additions and 641 deletions.
10 changes: 4 additions & 6 deletions Documentation/arm/OMAP/DSS
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,10 @@ FB0 +-- GFX ---- LCD ---- LCD
Misc notes
----------

OMAP FB allocates the framebuffer memory using the OMAP VRAM allocator.
OMAP FB allocates the framebuffer memory using the standard dma allocator. You
can enable Contiguous Memory Allocator (CONFIG_CMA) to improve the dma
allocator, and if CMA is enabled, you use "cma=" kernel parameter to increase
the global memory area for CMA.

Using DSI DPLL to generate pixel clock it is possible produce the pixel clock
of 86.5MHz (max possible), and with that you get 1280x1024@57 output from DVI.
Expand All @@ -301,11 +304,6 @@ framebuffer parameters.
Kernel boot arguments
---------------------

vram=<size>[,<physaddr>]
- Amount of total VRAM to preallocate and optionally a physical start
memory address. For example, "10M". omapfb allocates memory for
framebuffers from VRAM.

omapfb.mode=<display>:<mode>[,...]
- Default video mode for specified displays. For example,
"dvi:800x400MR-24@60". See drivers/video/modedb.c.
Expand Down
14 changes: 0 additions & 14 deletions arch/arm/mach-omap2/board-rx51-video.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#include <linux/mm.h>
#include <asm/mach-types.h>
#include <video/omapdss.h>
#include <plat/vram.h>
#include <linux/platform_data/spi-omap2-mcspi.h>

#include "board-rx51.h"
Expand Down Expand Up @@ -87,17 +86,4 @@ static int __init rx51_video_init(void)
}

subsys_initcall(rx51_video_init);

void __init rx51_video_mem_init(void)
{
/*
* GFX 864x480x32bpp
* VID1/2 1280x720x32bpp double buffered
*/
omap_vram_set_sdram_vram(PAGE_ALIGN(864 * 480 * 4) +
2 * PAGE_ALIGN(1280 * 720 * 4 * 2), 0);
}

#else
void __init rx51_video_mem_init(void) { }
#endif /* defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) */
3 changes: 0 additions & 3 deletions arch/arm/mach-omap2/board-rx51.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@

#define RX51_GPIO_SLEEP_IND 162

extern void rx51_video_mem_init(void);

static struct gpio_led gpio_leds[] = {
{
.name = "sleep_ind",
Expand Down Expand Up @@ -112,7 +110,6 @@ static void __init rx51_init(void)

static void __init rx51_reserve(void)
{
rx51_video_mem_init();
omap_reserve();
}

Expand Down
2 changes: 0 additions & 2 deletions arch/arm/plat-omap/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,13 @@
#include <linux/dma-mapping.h>

#include <plat/common.h>
#include <plat/vram.h>
#include <linux/platform_data/dsp-omap.h>
#include <plat/dma.h>

#include <plat/omap-secure.h>

void __init omap_reserve(void)
{
omap_vram_reserve_sdram_memblock();
omap_dsp_reserve_sdram_memblock();
omap_secure_ram_reserve_memblock();
omap_barrier_reserve_memblock();
Expand Down
5 changes: 3 additions & 2 deletions arch/arm/plat-omap/fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <linux/memblock.h>
#include <linux/io.h>
#include <linux/omapfb.h>
#include <linux/dma-mapping.h>

#include <mach/hardware.h>
#include <asm/mach/map.h>
Expand Down Expand Up @@ -106,7 +107,7 @@ static struct platform_device omap_fb_device = {
.id = -1,
.dev = {
.dma_mask = &omap_fb_dma_mask,
.coherent_dma_mask = ~(u32)0,
.coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &omapfb_config,
},
.num_resources = 0,
Expand Down Expand Up @@ -142,7 +143,7 @@ static struct platform_device omap_fb_device = {
.id = -1,
.dev = {
.dma_mask = &omap_fb_dma_mask,
.coherent_dma_mask = ~(u32)0,
.coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &omapfb_config,
},
.num_resources = 0,
Expand Down
43 changes: 0 additions & 43 deletions arch/arm/plat-omap/include/plat/vram.h

This file was deleted.

3 changes: 0 additions & 3 deletions drivers/video/omap2/Kconfig
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
config OMAP2_VRAM
bool

config OMAP2_VRFB
bool

Expand Down
1 change: 0 additions & 1 deletion drivers/video/omap2/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
obj-$(CONFIG_OMAP2_VRAM) += vram.o
obj-$(CONFIG_OMAP2_VRFB) += vrfb.o

obj-$(CONFIG_OMAP2_DSS) += dss/
Expand Down
12 changes: 0 additions & 12 deletions drivers/video/omap2/dss/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,6 @@ menuconfig OMAP2_DSS

if OMAP2_DSS

config OMAP2_VRAM_SIZE
int "VRAM size (MB)"
range 0 32
default 0
help
The amount of SDRAM to reserve at boot time for video RAM use.
This VRAM will be used by omapfb and other drivers that need
large continuous RAM area for video use.

You can also set this with "vram=<bytes>" kernel argument, or
in the board file.

config OMAP2_DSS_DEBUG
bool "Debug support"
default n
Expand Down
1 change: 0 additions & 1 deletion drivers/video/omap2/omapfb/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ menuconfig FB_OMAP2
tristate "OMAP2+ frame buffer support"
depends on FB && OMAP2_DSS && !DRM_OMAP

select OMAP2_VRAM
select OMAP2_VRFB if ARCH_OMAP2 || ARCH_OMAP3
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
Expand Down
14 changes: 7 additions & 7 deletions drivers/video/omap2/omapfb/omapfb-ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@

#include <video/omapdss.h>
#include <video/omapvrfb.h>
#include <plat/vram.h>

#include "omapfb.h"

Expand Down Expand Up @@ -853,14 +852,15 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg)
break;

case OMAPFB_GET_VRAM_INFO: {
unsigned long vram, free, largest;

DBG("ioctl GET_VRAM_INFO\n");

omap_vram_get_info(&vram, &free, &largest);
p.vram_info.total = vram;
p.vram_info.free = free;
p.vram_info.largest_free_block = largest;
/*
* We don't have the ability to get this vram info anymore.
* Fill in something that should keep the applications working.
*/
p.vram_info.total = SZ_1M * 64;
p.vram_info.free = SZ_1M * 64;
p.vram_info.largest_free_block = SZ_1M * 64;

if (copy_to_user((void __user *)arg, &p.vram_info,
sizeof(p.vram_info)))
Expand Down
69 changes: 36 additions & 33 deletions drivers/video/omap2/omapfb/omapfb-main.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
#include <linux/omapfb.h>

#include <video/omapdss.h>
#include <plat/vram.h>
#include <video/omapvrfb.h>

#include "omapfb.h"
Expand Down Expand Up @@ -1333,24 +1332,25 @@ static void omapfb_free_fbmem(struct fb_info *fbi)

rg = ofbi->region;

WARN_ON(atomic_read(&rg->map_count));

if (rg->paddr)
if (omap_vram_free(rg->paddr, rg->size))
dev_err(fbdev->dev, "VRAM FREE failed\n");
if (rg->token == NULL)
return;

if (rg->vaddr)
iounmap(rg->vaddr);
WARN_ON(atomic_read(&rg->map_count));

if (ofbi->rotation_type == OMAP_DSS_ROT_VRFB) {
/* unmap the 0 angle rotation */
if (rg->vrfb.vaddr[0]) {
iounmap(rg->vrfb.vaddr[0]);
omap_vrfb_release_ctx(&rg->vrfb);
rg->vrfb.vaddr[0] = NULL;
}

omap_vrfb_release_ctx(&rg->vrfb);
}

dma_free_attrs(fbdev->dev, rg->size, rg->token, rg->dma_handle,
&rg->attrs);

rg->token = NULL;
rg->vaddr = NULL;
rg->paddr = 0;
rg->alloc = 0;
Expand Down Expand Up @@ -1385,7 +1385,9 @@ static int omapfb_alloc_fbmem(struct fb_info *fbi, unsigned long size,
struct omapfb_info *ofbi = FB2OFB(fbi);
struct omapfb2_device *fbdev = ofbi->fbdev;
struct omapfb2_mem_region *rg;
void __iomem *vaddr;
void *token;
DEFINE_DMA_ATTRS(attrs);
dma_addr_t dma_handle;
int r;

rg = ofbi->region;
Expand All @@ -1400,42 +1402,43 @@ static int omapfb_alloc_fbmem(struct fb_info *fbi, unsigned long size,

size = PAGE_ALIGN(size);

if (!paddr) {
DBG("allocating %lu bytes for fb %d\n", size, ofbi->id);
r = omap_vram_alloc(size, &paddr);
} else {
DBG("reserving %lu bytes at %lx for fb %d\n", size, paddr,
ofbi->id);
r = omap_vram_reserve(paddr, size);
}
WARN_ONCE(paddr,
"reserving memory at predefined address not supported\n");

if (r) {
dma_set_attr(DMA_ATTR_WRITE_COMBINE, &attrs);

if (ofbi->rotation_type == OMAP_DSS_ROT_VRFB)
dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &attrs);

DBG("allocating %lu bytes for fb %d\n", size, ofbi->id);

token = dma_alloc_attrs(fbdev->dev, size, &dma_handle,
GFP_KERNEL, &attrs);

if (token == NULL) {
dev_err(fbdev->dev, "failed to allocate framebuffer\n");
return -ENOMEM;
}

if (ofbi->rotation_type != OMAP_DSS_ROT_VRFB) {
vaddr = ioremap_wc(paddr, size);

if (!vaddr) {
dev_err(fbdev->dev, "failed to ioremap framebuffer\n");
omap_vram_free(paddr, size);
return -ENOMEM;
}
DBG("allocated VRAM paddr %lx, vaddr %p\n",
(unsigned long)dma_handle, token);

DBG("allocated VRAM paddr %lx, vaddr %p\n", paddr, vaddr);
} else {
if (ofbi->rotation_type == OMAP_DSS_ROT_VRFB) {
r = omap_vrfb_request_ctx(&rg->vrfb);
if (r) {
dma_free_attrs(fbdev->dev, size, token, dma_handle,
&attrs);
dev_err(fbdev->dev, "vrfb create ctx failed\n");
return r;
}

vaddr = NULL;
}

rg->paddr = paddr;
rg->vaddr = vaddr;
rg->attrs = attrs;
rg->token = token;
rg->dma_handle = dma_handle;

rg->paddr = (unsigned long)dma_handle;
rg->vaddr = (void __iomem *)token;
rg->size = size;
rg->alloc = 1;

Expand Down
5 changes: 5 additions & 0 deletions drivers/video/omap2/omapfb/omapfb.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
#endif

#include <linux/rwsem.h>
#include <linux/dma-attrs.h>
#include <linux/dma-mapping.h>

#include <video/omapdss.h>

Expand All @@ -49,6 +51,9 @@ extern bool omapfb_debug;

struct omapfb2_mem_region {
int id;
struct dma_attrs attrs;
void *token;
dma_addr_t dma_handle;
u32 paddr;
void __iomem *vaddr;
struct vrfb vrfb;
Expand Down
Loading

0 comments on commit dcca5cf

Please sign in to comment.