diff options
Diffstat (limited to 'recipes/linux/linux-omap-pm/dss2/0136-DSS2-VRAM-separate-VRAM-setup-from-the-old-fb-vram.patch')
-rw-r--r-- | recipes/linux/linux-omap-pm/dss2/0136-DSS2-VRAM-separate-VRAM-setup-from-the-old-fb-vram.patch | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-pm/dss2/0136-DSS2-VRAM-separate-VRAM-setup-from-the-old-fb-vram.patch b/recipes/linux/linux-omap-pm/dss2/0136-DSS2-VRAM-separate-VRAM-setup-from-the-old-fb-vram.patch new file mode 100644 index 0000000000..d9a87d12bf --- /dev/null +++ b/recipes/linux/linux-omap-pm/dss2/0136-DSS2-VRAM-separate-VRAM-setup-from-the-old-fb-vram.patch @@ -0,0 +1,311 @@ +From 623b67b81b32b758915a58816bc75e092aa33bb8 Mon Sep 17 00:00:00 2001 +From: Tomi Valkeinen <tomi.valkeinen@nokia.com> +Date: Thu, 2 Jul 2009 11:05:08 +0300 +Subject: [PATCH 136/146] DSS2: VRAM: separate VRAM setup from the old fb vram setup + +Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com> +--- + arch/arm/mach-omap2/io.c | 2 + + arch/arm/plat-omap/fb.c | 11 +++++- + arch/arm/plat-omap/include/mach/vram.h | 6 +++ + arch/arm/plat-omap/sram.c | 15 +++++--- + arch/arm/plat-omap/vram.c | 60 ++++++++++++++++---------------- + include/linux/omapfb.h | 5 +++ + 6 files changed, 62 insertions(+), 37 deletions(-) + +diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c +index 5c91f36..221c60f 100644 +--- a/arch/arm/mach-omap2/io.c ++++ b/arch/arm/mach-omap2/io.c +@@ -32,6 +32,7 @@ + #include <mach/sram.h> + #include <mach/sdrc.h> + #include <mach/gpmc.h> ++#include <mach/vram.h> + + #ifndef CONFIG_ARCH_OMAP4 /* FIXME: Remove this once clkdev is ready */ + #include "clock.h" +@@ -240,6 +241,7 @@ void __init omap2_map_common_io(void) + omap2_check_revision(); + omap_sram_init(); + omapfb_reserve_sdram(); ++ omap_vram_reserve_sdram(); + } + + /* +diff --git a/arch/arm/plat-omap/fb.c b/arch/arm/plat-omap/fb.c +index 1dc3415..70fbeae 100644 +--- a/arch/arm/plat-omap/fb.c ++++ b/arch/arm/plat-omap/fb.c +@@ -355,6 +355,16 @@ static inline int omap_init_fb(void) + + arch_initcall(omap_init_fb); + ++void omapfb_reserve_sdram(void) {} ++unsigned long omapfb_reserve_sram(unsigned long sram_pstart, ++ unsigned long sram_vstart, ++ unsigned long sram_size, ++ unsigned long start_avail, ++ unsigned long size_avail) ++{ ++ return 0; ++} ++ + #else + + void omapfb_reserve_sdram(void) {} +@@ -367,5 +377,4 @@ unsigned long omapfb_reserve_sram(unsigned long sram_pstart, + return 0; + } + +- + #endif +diff --git a/arch/arm/plat-omap/include/mach/vram.h b/arch/arm/plat-omap/include/mach/vram.h +index 66b788e..8d26b05 100644 +--- a/arch/arm/plat-omap/include/mach/vram.h ++++ b/arch/arm/plat-omap/include/mach/vram.h +@@ -37,4 +37,10 @@ extern void omap_vram_get_info(unsigned long *vram, unsigned long *free_vram, + extern void omap2_set_sdram_vram(u32 size, u32 start); + extern void omap2_set_sram_vram(u32 size, u32 start); + ++extern void omap_vram_reserve_sdram(void); ++extern unsigned long omap_vram_reserve_sram(unsigned long sram_pstart, ++ unsigned long sram_vstart, ++ unsigned long sram_size, ++ unsigned long pstart_avail, ++ unsigned long size_avail); + #endif +diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c +index 4ea7380..26797e7 100644 +--- a/arch/arm/plat-omap/sram.c ++++ b/arch/arm/plat-omap/sram.c +@@ -19,6 +19,7 @@ + #include <linux/kernel.h> + #include <linux/init.h> + #include <linux/io.h> ++#include <linux/omapfb.h> + + #include <asm/tlb.h> + #include <asm/cacheflush.h> +@@ -28,6 +29,7 @@ + #include <mach/sram.h> + #include <mach/board.h> + #include <mach/cpu.h> ++#include <mach/vram.h> + + #include <mach/control.h> + +@@ -76,12 +78,6 @@ static unsigned long omap_sram_base; + static unsigned long omap_sram_size; + static unsigned long omap_sram_ceil; + +-extern unsigned long omapfb_reserve_sram(unsigned long sram_pstart, +- unsigned long sram_vstart, +- unsigned long sram_size, +- unsigned long pstart_avail, +- unsigned long size_avail); +- + /* + * Depending on the target RAMFS firewall setup, the public usable amount of + * SRAM varies. The default accessible size for all device types is 2k. A GP +@@ -185,6 +181,13 @@ void __init omap_detect_sram(void) + omap_sram_start + SRAM_BOOTLOADER_SZ, + omap_sram_size - SRAM_BOOTLOADER_SZ); + omap_sram_size -= reserved; ++ ++ reserved = omap_vram_reserve_sram(omap_sram_start, omap_sram_base, ++ omap_sram_size, ++ omap_sram_start + SRAM_BOOTLOADER_SZ, ++ omap_sram_size - SRAM_BOOTLOADER_SZ); ++ omap_sram_size -= reserved; ++ + omap_sram_ceil = omap_sram_base + omap_sram_size; + } + +diff --git a/arch/arm/plat-omap/vram.c b/arch/arm/plat-omap/vram.c +index 2954764..6c4bc18 100644 +--- a/arch/arm/plat-omap/vram.c ++++ b/arch/arm/plat-omap/vram.c +@@ -39,7 +39,7 @@ + #include <mach/dma.h> + + #ifdef DEBUG +-#define DBG(format, ...) printk(KERN_DEBUG "VRAM: " format, ## __VA_ARGS__) ++#define DBG(format, ...) pr_debug("VRAM: " format, ## __VA_ARGS__) + #else + #define DBG(format, ...) + #endif +@@ -239,7 +239,7 @@ static int _omap_vram_reserve(unsigned long paddr, unsigned pages) + if (!(start <= paddr && end >= paddr + size - 1)) + continue; + found: +- DBG("FOUND area start %lx, end %lx\n", start, end); ++ DBG("found area start %lx, end %lx\n", start, end); + + if (omap_vram_create_allocation(rm, paddr, pages) == NULL) + return -ENOMEM; +@@ -352,7 +352,7 @@ found: + if (end - start < pages << PAGE_SHIFT) + continue; + +- DBG("FOUND %lx, end %lx\n", start, end); ++ DBG("found %lx, end %lx\n", start, end); + + alloc = omap_vram_create_allocation(rm, start, pages); + if (alloc == NULL) +@@ -504,30 +504,30 @@ arch_initcall(omap_vram_init); + /* boottime vram alloc stuff */ + + /* set from board file */ +-static u32 omapfb_sram_vram_start __initdata; +-static u32 omapfb_sram_vram_size __initdata; ++static u32 omap_vram_sram_start __initdata; ++static u32 omap_vram_sram_size __initdata; + + /* set from board file */ +-static u32 omapfb_sdram_vram_start __initdata; +-static u32 omapfb_sdram_vram_size __initdata; ++static u32 omap_vram_sdram_start __initdata; ++static u32 omap_vram_sdram_size __initdata; + + /* set from kernel cmdline */ +-static u32 omapfb_def_sdram_vram_size __initdata; +-static u32 omapfb_def_sdram_vram_start __initdata; ++static u32 omap_vram_def_sdram_size __initdata; ++static u32 omap_vram_def_sdram_start __initdata; + +-static void __init omapfb_early_vram(char **p) ++static void __init omap_vram_early_vram(char **p) + { +- omapfb_def_sdram_vram_size = memparse(*p, p); ++ omap_vram_def_sdram_size = memparse(*p, p); + if (**p == ',') +- omapfb_def_sdram_vram_start = simple_strtoul((*p) + 1, p, 16); ++ omap_vram_def_sdram_start = simple_strtoul((*p) + 1, p, 16); + } +-__early_param("vram=", omapfb_early_vram); ++__early_param("vram=", omap_vram_early_vram); + + /* + * Called from map_io. We need to call to this early enough so that we + * can reserve the fixed SDRAM regions before VM could get hold of them. + */ +-void __init omapfb_reserve_sdram(void) ++void __init omap_vram_reserve_sdram(void) + { + struct bootmem_data *bdata; + unsigned long sdram_start, sdram_size; +@@ -535,14 +535,14 @@ void __init omapfb_reserve_sdram(void) + u32 size = 0; + + /* cmdline arg overrides the board file definition */ +- if (omapfb_def_sdram_vram_size) { +- size = omapfb_def_sdram_vram_size; +- paddr = omapfb_def_sdram_vram_start; ++ if (omap_vram_def_sdram_size) { ++ size = omap_vram_def_sdram_size; ++ paddr = omap_vram_def_sdram_start; + } + + if (!size) { +- size = omapfb_sdram_vram_size; +- paddr = omapfb_sdram_vram_start; ++ size = omap_vram_sdram_size; ++ paddr = omap_vram_sdram_start; + } + + #ifdef CONFIG_OMAP2_DSS_VRAM_SIZE +@@ -564,7 +564,7 @@ void __init omapfb_reserve_sdram(void) + if (paddr) { + if ((paddr & ~PAGE_MASK) || paddr < sdram_start || + paddr + size > sdram_start + sdram_size) { +- printk(KERN_ERR "Illegal SDRAM region for VRAM\n"); ++ pr_err("Illegal SDRAM region for VRAM\n"); + return; + } + +@@ -574,7 +574,7 @@ void __init omapfb_reserve_sdram(void) + } + } else { + if (size > sdram_size) { +- printk(KERN_ERR "Illegal SDRAM size for VRAM\n"); ++ pr_err("Illegal SDRAM size for VRAM\n"); + return; + } + +@@ -597,7 +597,7 @@ void __init omapfb_reserve_sdram(void) + * this point, since the driver built as a module would have problem with + * freeing / reallocating the regions. + */ +-unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart, ++unsigned long __init omap_vram_reserve_sram(unsigned long sram_pstart, + unsigned long sram_vstart, + unsigned long sram_size, + unsigned long pstart_avail, +@@ -608,8 +608,8 @@ unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart, + u32 paddr; + u32 size; + +- paddr = omapfb_sram_vram_start; +- size = omapfb_sram_vram_size; ++ paddr = omap_vram_sram_start; ++ size = omap_vram_sram_size; + + if (!size) + return 0; +@@ -620,7 +620,7 @@ unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart, + if (!paddr) { + /* Dynamic allocation */ + if ((size_avail & PAGE_MASK) < size) { +- printk(KERN_ERR "Not enough SRAM for VRAM\n"); ++ pr_err("Not enough SRAM for VRAM\n"); + return 0; + } + size_avail = (size_avail - size) & PAGE_MASK; +@@ -629,7 +629,7 @@ unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart, + + if (paddr < sram_pstart || + paddr + size > sram_pstart + sram_size) { +- printk(KERN_ERR "Illegal SRAM region for VRAM\n"); ++ pr_err("Illegal SRAM region for VRAM\n"); + return 0; + } + +@@ -648,14 +648,14 @@ unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart, + + void __init omap2_set_sdram_vram(u32 size, u32 start) + { +- omapfb_sdram_vram_start = start; +- omapfb_sdram_vram_size = size; ++ omap_vram_sdram_start = start; ++ omap_vram_sdram_size = size; + } + + void __init omap2_set_sram_vram(u32 size, u32 start) + { +- omapfb_sram_vram_start = start; +- omapfb_sram_vram_size = size; ++ omap_vram_sram_start = start; ++ omap_vram_sram_size = size; + } + + #endif +diff --git a/include/linux/omapfb.h b/include/linux/omapfb.h +index 0df0df9..67dc375 100644 +--- a/include/linux/omapfb.h ++++ b/include/linux/omapfb.h +@@ -424,6 +424,11 @@ extern struct lcd_ctrl omap2_disp_ctrl; + extern void omapfb_set_platform_data(struct omapfb_platform_data *data); + + extern void omapfb_reserve_sdram(void); ++extern unsigned long omapfb_reserve_sram(unsigned long sram_pstart, ++ unsigned long sram_vstart, ++ unsigned long sram_size, ++ unsigned long pstart_avail, ++ unsigned long size_avail); + extern void omapfb_register_panel(struct lcd_panel *panel); + extern void omapfb_write_first_pixel(struct omapfb_device *fbdev, u16 pixval); + extern void omapfb_notify_clients(struct omapfb_device *fbdev, +-- +1.6.2.4 + |