OMAPFB: use dma_alloc instead of omap's vram
Subsystems (5)
cover OMAPFB: use dma_alloc instead of omap's vram
Hi,
This series changes omapfb to use standard dma_alloc funcs instead of omap specific vram allocator. This let's us remove the omap vram allocator, making omapfb platform independent.
However, note that using standard dma funcs causes the following downsides:
1) dma_alloc_attrs doesn't let us allocate at certain physical address. However, this should not be a problem as this feature of vram allocator is only used when reserving the framebuffer that was initialized by the bootloader, and we don't currently support "passing" a framebuffer from the bootloader to the kernel anyway.
2) dma_alloc_attrs, as of now, always ioremaps the allocated area, and we don't need the ioremap when using VRFB. This patch uses DMA_ATTR_NO_KERNEL_MAPPING for the allocation, but the flag is currently not operational.
3) OMAPFB_GET_VRAM_INFO ioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".
4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
Tomi
Tomi Valkeinen (5):
OMAP: FB: use DMA_BIT_MASK() for fb's coherent_dma_mask
OMAPFB: use dma_alloc_attrs to allocate memory
OMAP: RX51: remove use of vram
OMAP: common.c: remove init call to vram
OMAP: remove vram allocator
arch/arm/mach-omap2/board-rx51-video.c | 14 - arch/arm/mach-omap2/board-rx51.c | 3 - arch/arm/plat-omap/common.c | 2 - arch/arm/plat-omap/fb.c | 5 +- arch/arm/plat-omap/include/plat/vram.h | 43 --- drivers/video/omap2/Kconfig | 3 - drivers/video/omap2/Makefile | 1 - drivers/video/omap2/dss/Kconfig | 12 - drivers/video/omap2/omapfb/Kconfig | 1 - drivers/video/omap2/omapfb/omapfb-ioctl.c | 14 +- drivers/video/omap2/omapfb/omapfb-main.c | 69 ++-- drivers/video/omap2/omapfb/omapfb.h | 5 + drivers/video/omap2/vram.c | 514 ----------------------------- 13 files changed, 51 insertions(+), 635 deletions(-) delete mode 100644 arch/arm/plat-omap/include/plat/vram.h delete mode 100644 drivers/video/omap2/vram.c
Signature · 1 line
1.7.10.4
PATCH 1/5 OMAP: FB: use DMA_BIT_MASK() for fb's coherent_dma_mask
Use DMA_BIT_MASK() for fb's coherent_dma_mask for clarity.
--- arch/arm/plat-omap/fb.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
arch/arm/plat-omap/fb.c +3 -2
@@ -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>
@@ -45,7 +46,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,
@@ -81,7 +82,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,
Signature · 1 line
1.7.10.4
PATCH 2/5 OMAPFB: use dma_alloc_attrs to allocate memory
In reply to Tomi ValkeinenUse dma_alloc_attrs to allocate memory instead of omap specific vram allocator. After this we can remove the omap vram allocator.
There are some downsides to this change:
1) dma_alloc_attrs doesn't let us allocate at certain physical address. However, this should not be a problem as this feature of vram allocator is only used when reserving the framebuffer that was initialized by the bootloader, and we don't currently support "passing" a framebuffer from the bootloader to the kernel anyway.
2) dma_alloc_attrs, as of now, always ioremaps the allocated area, and we don't need the ioremap when using VRFB. This patch uses DMA_ATTR_NO_KERNEL_MAPPING for the allocation, but the flag is currently not operational.
3) OMAPFB_GET_VRAM_INFO ioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".
4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
--- drivers/video/omap2/omapfb/Kconfig | 1 - drivers/video/omap2/omapfb/omapfb-ioctl.c | 14 +++--- drivers/video/omap2/omapfb/omapfb-main.c | 69 +++++++++++++++-------------- drivers/video/omap2/omapfb/omapfb.h | 5 +++ 4 files changed, 48 insertions(+), 41 deletions(-)
drivers/video/omap2/omapfb/Kconfig +0 -1
@@ -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
drivers/video/omap2/omapfb/omapfb-ioctl.c +7 -7
@@ -31,7 +31,6 @@#include <video/omapdss.h> #include <plat/vrfb.h> -#include <plat/vram.h> #include "omapfb.h"
@@ -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)))
drivers/video/omap2/omapfb/omapfb-main.c +36 -33
116 lines not on this page · raw message
drivers/video/omap2/omapfb/omapfb.h +5 -0
@@ -28,6 +28,8 @@#endif #include <linux/rwsem.h> +#include <linux/dma-attrs.h> +#include <linux/dma-mapping.h> #include <video/omapdss.h>
@@ -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;
Signature · 1 line
1.7.10.4
PATCH 3/5 OMAP: RX51: remove use of vram
In reply to Tomi ValkeinenAs omapfb no longer uses omap specific vram allocator we can remove the vram pre-allocation from rx51 board file.
--- arch/arm/mach-omap2/board-rx51-video.c | 14 -------------- arch/arm/mach-omap2/board-rx51.c | 3 --- 2 files changed, 17 deletions(-)
arch/arm/mach-omap2/board-rx51-video.c +0 -14
@@ -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"
@@ -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) */
arch/arm/mach-omap2/board-rx51.c +0 -3
@@ -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" ,
@@ -112,7 +110,6 @@ static void __init rx51_init(void)static void __init rx51_reserve (void ) { -rx51_video_mem_init ();omap_reserve (); }
Signature · 1 line
1.7.10.4
PATCH 4/5 OMAP: common.c: remove init call to vram
In reply to Tomi ValkeinenOMAP specific vram allocator is no longer used, and we can remove init call to the vram allocator.
--- arch/arm/plat-omap/common.c | 2 -- 1 file changed, 2 deletions(-)
arch/arm/plat-omap/common.c +0 -2
@@ -17,7 +17,6 @@#include <linux/dma-mapping.h> #include <plat/common.h> -#include <plat/vram.h> #include <linux/platform_data/dsp-omap.h> #include <plat/dma.h>
@@ -25,7 +24,6 @@void __init omap_reserve (void ) { -omap_vram_reserve_sdram_memblock ();omap_dsp_reserve_sdram_memblock ();omap_secure_ram_reserve_memblock ();omap_barrier_reserve_memblock ();
Signature · 1 line
1.7.10.4
PATCH 5/5 OMAP: remove vram allocator
In reply to Tomi ValkeinenOMAP specific vram allocator is no longer in use, and we can remove all the vram code.
--- arch/arm/plat-omap/include/plat/vram.h | 43 --- drivers/video/omap2/Kconfig | 3 - drivers/video/omap2/Makefile | 1 - drivers/video/omap2/dss/Kconfig | 12 - drivers/video/omap2/vram.c | 514 -------------------------------- 5 files changed, 573 deletions(-) delete mode 100644 arch/arm/plat-omap/include/plat/vram.h delete mode 100644 drivers/video/omap2/vram.c
arch/arm/plat-omap/include/plat/vram.h deleted +0 -43
@@ -1,43 +0,0 @@ -/* -* VRAM manager for OMAP -* -* Copyright (C) 2009 Nokia Corporation -* Author: Tomi Valkeinen <[email protected]> -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 2 as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* General Public License for more details. -* -* You should have received a copy of the GNU General Public License along -* with this program; if not, write to the Free Software Foundation, Inc., -* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#ifndef __OMAP_VRAM_H__ -#define __OMAP_VRAM_H__ - -#include <linux/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 (size_t size,unsigned long *paddr); -extern int omap_vram_reserve (unsigned long paddr,size_t size); -extern void omap_vram_get_info (unsigned long *vram,unsigned long *free_vram, -unsigned long *largest_free_block); - -#ifdef CONFIG_OMAP2_VRAM -extern void omap_vram_set_sdram_vram (u32 size,u32 start); - -extern void omap_vram_reserve_sdram_memblock (void ); -#else -static inline void omap_vram_set_sdram_vram (u32 size,u32 start) { } - -static inline void omap_vram_reserve_sdram_memblock (void ) { } -#endif - -#endif
drivers/video/omap2/Kconfig +0 -3
@@ -1,6 +1,3 @@ -config OMAP2_VRAM - bool - config OMAP2_VRFB bool
drivers/video/omap2/Makefile +0 -1
@@ -1,4 +1,3 @@ -obj-$(CONFIG_OMAP2_VRAM) += vram.o obj-$(CONFIG_OMAP2_VRFB) += vrfb.o obj-$(CONFIG_OMAP2_DSS) += dss/
drivers/video/omap2/dss/Kconfig +0 -12
@@ -6,18 +6,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_SUPPORT bool "Debug support" default y
drivers/video/omap2/vram.c deleted +0 -514
514 lines not on this page · raw message
Signature · 1 line
1.7.10.4
cover OMAPFB: use dma_alloc instead of omap's vram
In reply to Tomi ValkeinenHi,
Quoted 11 lines · Tomi Valkeinen
This series changes omapfb to use standard
dma_allocfuncs instead of omap specific vram allocator. This let's us remove the omap vram allocator, making omapfb platform independent.However, note that using standard dma funcs causes the following downsides:
...
3)
OMAPFB_GET_VRAM_INFOioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".
Do at least OMAPFB_QUERY_MEM/OMAPFB_SETUP_MEM still work?
Quoted 2 lines
4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
That's a significant change, you should update Documentation/ . What about omapfb.vram, is it still there?
Perhaps we also need to select/depend on CMA?
Signature · 1 line
Gra?vydas
cover OMAPFB: use dma_alloc instead of omap's vram
Quoted 9 lines · Grazvydas Ignotas
Hi,
Quoted 6 lines · Tomi Valkeinen
This series changes omapfb to use standard
dma_allocfuncs instead of omap specific vram allocator. This let's us remove the omap vram allocator, making omapfb platform independent.However, note that using standard dma funcs causes the following downsides:
Quoted 7 lines
Quoted 5 lines
...
3)
OMAPFB_GET_VRAM_INFOioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".Do at least OMAPFB_QUERY_MEM/OMAPFB_SETUP_MEM still work?
Yes.
Quoted 4 lines
Quoted 2 lines
4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
That's a significant change, you should update
Documentation/.
Ah right. The documentation. I never remember =).
Quoted 1 line
What about omapfb.vram, is it still there?
Yes.
Quoted 1 line
Perhaps we also need to select/depend on CMA?
dma_alloc_* funcs work fine without CMA. CMA only makes them work better. Thus I don't think OMAPFB should depend on CMA, but perhaps CMA should be enabled by default in omap2plus_defconfig?
Tomi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 897 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121112/e79a30b7/attachment.sig>
cover OMAPFB: use dma_alloc instead of omap's vram
In reply to Grazvydas IgnotasQuoted 15 lines · Grazvydas Ignotas
Hi,
Quoted 11 lines · Tomi Valkeinen
This series changes omapfb to use standard
dma_allocfuncs instead of omap specific vram allocator. This let's us remove the omap vram allocator, making omapfb platform independent.However, note that using standard dma funcs causes the following downsides:
...
3)
OMAPFB_GET_VRAM_INFOioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".
Quoted 6 lines
Do at least OMAPFB_QUERY_MEM/OMAPFB_SETUP_MEM still work?
Quoted 2 lines
4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
That's a significant change, you should update
Documentation/.
I've added the following documentation change:
Documentation/arm/OMAP/DSS +4 -6
@@ -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 at 57 output from DVI.
@@ -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. -
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 897 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121112/64153f68/attachment-0001.sig>
Tony Lindgren
maintainercover OMAPFB: use dma_alloc instead of omap's vram
In reply to Tomi ValkeinenQuoted 19 lines · Tomi Valkeinen
Hi,
This series changes omapfb to use standard
dma_allocfuncs instead of omap specific vram allocator. This let's us remove the omap vram allocator, making omapfb platform independent.However, note that using standard dma funcs causes the following downsides:
1)
dma_alloc_attrsdoesn't let us allocate at certain physical address. However, this should not be a problem as this feature of vram allocator is only used when reserving the framebuffer that was initialized by the bootloader, and we don't currently support "passing" a framebuffer from the bootloader to the kernel anyway.2)
dma_alloc_attrs, as of now, always ioremaps the allocated area, and we don't need the ioremap when using VRFB. This patch usesDMA_ATTR_NO_KERNEL_MAPPINGfor the allocation, but the flag is currently not operational.
Quoted 6 lines
3)
OMAPFB_GET_VRAM_INFOioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
Great, thanks for fixing these. Could you please queue these into a separate branch against v3.7-rc5 that I can also merge into omap-for-v3.8/cleanup-headers-prepare-multiplatform-v3?
Feel free to add my Acked-by: Tony Lindgren <[email protected]> to the arch/arm/*omap*/* parts.
Regards,
Tony
cover OMAPFB: use dma_alloc instead of omap's vram
Quoted 27 lines · Tony Lindgren
Quoted 19 lines · Tomi Valkeinen
Hi,
This series changes omapfb to use standard
dma_allocfuncs instead of omap specific vram allocator. This let's us remove the omap vram allocator, making omapfb platform independent.However, note that using standard dma funcs causes the following downsides:
1)
dma_alloc_attrsdoesn't let us allocate at certain physical address. However, this should not be a problem as this feature of vram allocator is only used when reserving the framebuffer that was initialized by the bootloader, and we don't currently support "passing" a framebuffer from the bootloader to the kernel anyway.2)
dma_alloc_attrs, as of now, always ioremaps the allocated area, and we don't need the ioremap when using VRFB. This patch usesDMA_ATTR_NO_KERNEL_MAPPINGfor the allocation, but the flag is currently not operational.Quoted 6 lines
3)
OMAPFB_GET_VRAM_INFOioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
Quoted 6 lines
Great, thanks for fixing these. Could you please queue these into a separate branch against v3.7-rc5 that I can also merge into omap-for-v3.8/cleanup-headers-prepare-multiplatform-v3?
Feel free to add my Acked-by: Tony Lindgren <[email protected]> to the
arch/arm/*omap*/*parts.
I added your acks, and pushed:
git://gitorious.org/linux-omap-dss2/linux.git 3.8/vram-conversion
It's based on -rc4 as my other branches are based on that.
Tomi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 897 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121116/826d1247/attachment.sig>
Tony Lindgren
maintainercover OMAPFB: use dma_alloc instead of omap's vram
Quoted 6 lines · Tomi Valkeinen
I added your acks, and pushed:
git://gitorious.org/linux-omap-dss2/linux.git3.8/vram-conversionIt's based on -rc4 as my other branches are based on that.
OK thanks!
Tony
cover OMAPFB: use dma_alloc instead of omap's vram
HI Tomi,
we need one rank of cma to allocate the memory for driver in kernel space .And the default CMA is for allocating memory frome usespace.So if we allocate the memory from the
default CMA zone ,there maybe introduce fragmention to the default CMA zone.The kernel space memory donot touch the memory from userspace
Jello Huang
Quoted 16 lines · Tony Lindgren
Quoted 6 lines · Tomi Valkeinen
I added your acks, and pushed:
git://gitorious.org/linux-omap-dss2/linux.git3.8/vram-conversionIt's based on -rc4 as my other branches are based on that.
OK thanks!
Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 2 lines
Thanks Jello Huang
cover OMAPFB: use dma_alloc instead of omap's vram
Hi,
Quoted 6 lines · Jello huang
HI Tomi,
we need one rank of cma to allocate the memory for driver in kernel space .And the default CMA is for allocating memory frome usespace.So if we allocate the memory from the
default CMA zone ,there maybe introduce fragmention to the default CMA zone.The kernel space memory donot touch the memory from userspace
Can you elaborate a bit? I didn't understand your point. Are you saying each kernel driver that uses dma_alloc should have their own CMA zone? That doesn't make sense...
How do you allocate CMA memory from userspace?
Tomi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 899 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121122/69798536/attachment.sig>
cover OMAPFB: use dma_alloc instead of omap's vram
hi
Sorry donot describe clearly.
Quoted 1 line
Quoted 1 line
How do you allocate CMA memory from userspace
memory is allocated by userland then pass the size to kernel space
I mean that we can split two parts of memory heap .one for the kernel space and other for userland app. we can use dma_declare_contiguous to declare one dma device A and B .Then the all kernel driver allocate from A .The other B allocate for userland
Quoted 20 lines · Tomi Valkeinen
Hi,
Quoted 6 lines · Jello huang
HI Tomi,
we need one rank of cma to allocate the memory for driver in kernel space .And the default CMA is for allocating memory frome usespace.So if we allocate the memory from the
default CMA zone ,there maybe introduce fragmention to the default CMA zone.The kernel space memory donot touch the memory from userspaceCan you elaborate a bit? I didn't understand your point. Are you saying each kernel driver that uses
dma_allocshould have their own CMA zone? That doesn't make sense...How do you allocate CMA memory from userspace?
Tomi
Signature · 5 lines
Thanks Jello Huang -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121123/0c141965/attachment.html>
cover OMAPFB: use dma_alloc instead of omap's vram
In reply to Tony LindgrenHi Tony,
Quoted 24 lines · Tony Lindgren
Quoted 23 lines · Tomi Valkeinen
Hi,
This series changes omapfb to use standard
dma_allocfuncs instead of omap specific vram allocator. This let's us remove the omap vram allocator, making omapfb platform independent.However, note that using standard dma funcs causes the following downsides:
1)
dma_alloc_attrsdoesn't let us allocate at certain physical address. However, this should not be a problem as this feature of vram allocator is only used when reserving the framebuffer that was initialized by the bootloader, and we don't currently support "passing" a framebuffer from the bootloader to the kernel anyway.2)
dma_alloc_attrs, as of now, always ioremaps the allocated area, and we don't need the ioremap when using VRFB. This patch usesDMA_ATTR_NO_KERNEL_MAPPINGfor the allocation, but the flag is currently not operational.3)
OMAPFB_GET_VRAM_INFOioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".
Quoted 6 lines
Quoted 2 lines
4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
Great, thanks for fixing these. Could you please queue these into a separate branch against v3.7-rc5 that I can also merge into omap-for-v3.8/cleanup-headers-prepare-multiplatform-v3?
Should we enable CMA by default in omap2plus_defconfig? And perhaps on omap1 also?
I have to say I don't know the details of the dma allocation, but afaik there are no drawbacks with CMA. Although it is still marked EXPERIMENTAL in the kconfig...
Tomi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 897 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121116/7903ce26/attachment.sig>
Tony Lindgren
maintainercover OMAPFB: use dma_alloc instead of omap's vram
Quoted 30 lines · Tomi Valkeinen
Hi Tony,
Quoted 27 lines · Tony Lindgren
Quoted 25 lines · Tomi Valkeinen
Hi,
This series changes omapfb to use standard
dma_allocfuncs instead of omap specific vram allocator. This let's us remove the omap vram allocator, making omapfb platform independent.However, note that using standard dma funcs causes the following downsides:
1)
dma_alloc_attrsdoesn't let us allocate at certain physical address. However, this should not be a problem as this feature of vram allocator is only used when reserving the framebuffer that was initialized by the bootloader, and we don't currently support "passing" a framebuffer from the bootloader to the kernel anyway.2)
dma_alloc_attrs, as of now, always ioremaps the allocated area, and we don't need the ioremap when using VRFB. This patch usesDMA_ATTR_NO_KERNEL_MAPPINGfor the allocation, but the flag is currently not operational.3)
OMAPFB_GET_VRAM_INFOioctl cannot return real values anymore. I changed the ioctl to return 64M for all the values, which, I hope, the applications will interpret as "there's enough vram".4) "vram" kernel parameter to define how much ram to reserve for video use no longer works. The user needs to enable CMA and use "cma" parameter.
Quoted 6 lines
Quoted 3 lines
Great, thanks for fixing these. Could you please queue these into a separate branch against v3.7-rc5 that I can also merge into omap-for-v3.8/cleanup-headers-prepare-multiplatform-v3?
Should we enable CMA by default in
omap2plus_defconfig? And perhaps on omap1 also?
Yes if that's now needed for DSS.
Quoted 3 lines
I have to say I don't know the details of the dma allocation, but afaik there are no drawbacks with CMA. Although it is still marked EXPERIMENTAL in the kconfig...
I guess that's still fine as that's what we're supposed to use :)
Regards,
Tony
cover OMAPFB: use dma_alloc instead of omap's vram
Quoted 4 lines · Tony Lindgren
Quoted 2 lines
Should we enable CMA by default in
omap2plus_defconfig? And perhaps on omap1 also?Yes if that's now needed for DSS.
DSS works fine without CMA, at least for small displays, and when fb allocation is done at boot time. So it's not a strict "need".
I'm not sure how easily FB allocations start to fail without CMA, and how much CMA helps.
I'm not even sure what's the default DMA pool size on OMAP... If it's the one set with "coherent_pool" kernel parameter, then the default seems to be 256K, which is quite small for video use. For CMA the default global area is 16M. Both can, of course, be changed with boot params or kernel config (at least for CMA).
But I think it makes sense to have CMA by default even if non-CMA kernel would work.
Tomi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 897 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121120/85fa6eaa/attachment.sig>