aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2011-09-20 07:12:43 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2012-02-23 02:39:14 -0500
commit1e434f9318efc3dddc0c0b8d2071712668154c2b (patch)
treedb349ba5abef7373e5ccc64305fdd923e24e290b
parent6651b0ea9202541091f6c23ec8715122ea8cc1b0 (diff)
OMAPFB: remove early mem alloc from old omapfb
arch/arm/plat-omap/fb.c contains code to alloc omapfb buffers at early boot time according to information given from the bootloader or board file. This code isn't currently used by any board, and is anyway something that the newer vram.c could handle. So remove the alloc code and in later patches make old omapfb driver use vram.c. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Acked-by: Tony Lindgren <tony@atomide.com>
-rw-r--r--arch/arm/plat-omap/common.c2
-rw-r--r--arch/arm/plat-omap/fb.c140
-rw-r--r--include/linux/omapfb.h1
3 files changed, 2 insertions, 141 deletions
diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c
index 06383b51e655..2081f0f578e5 100644
--- a/arch/arm/plat-omap/common.c
+++ b/arch/arm/plat-omap/common.c
@@ -15,7 +15,6 @@
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/io.h> 16#include <linux/io.h>
17#include <linux/dma-mapping.h> 17#include <linux/dma-mapping.h>
18#include <linux/omapfb.h>
19 18
20#include <plat/common.h> 19#include <plat/common.h>
21#include <plat/board.h> 20#include <plat/board.h>
@@ -65,7 +64,6 @@ const void *__init omap_get_var_config(u16 tag, size_t *len)
65 64
66void __init omap_reserve(void) 65void __init omap_reserve(void)
67{ 66{
68 omapfb_reserve_sdram_memblock();
69 omap_vram_reserve_sdram_memblock(); 67 omap_vram_reserve_sdram_memblock();
70 omap_dsp_reserve_sdram_memblock(); 68 omap_dsp_reserve_sdram_memblock();
71 omap_secure_ram_reserve_memblock(); 69 omap_secure_ram_reserve_memblock();
diff --git a/arch/arm/plat-omap/fb.c b/arch/arm/plat-omap/fb.c
index a05ab5673556..a742b60912cd 100644
--- a/arch/arm/plat-omap/fb.c
+++ b/arch/arm/plat-omap/fb.c
@@ -38,8 +38,6 @@
38#if defined(CONFIG_FB_OMAP) || defined(CONFIG_FB_OMAP_MODULE) 38#if defined(CONFIG_FB_OMAP) || defined(CONFIG_FB_OMAP_MODULE)
39 39
40static struct omapfb_platform_data omapfb_config; 40static struct omapfb_platform_data omapfb_config;
41static int config_invalid;
42static int configured_regions;
43 41
44static u64 omap_fb_dma_mask = ~(u32)0; 42static u64 omap_fb_dma_mask = ~(u32)0;
45 43
@@ -58,140 +56,14 @@ void omapfb_set_platform_data(struct omapfb_platform_data *data)
58{ 56{
59} 57}
60 58
61static inline int ranges_overlap(unsigned long start1, unsigned long size1,
62 unsigned long start2, unsigned long size2)
63{
64 return (start1 >= start2 && start1 < start2 + size2) ||
65 (start2 >= start1 && start2 < start1 + size1);
66}
67
68static inline int range_included(unsigned long start1, unsigned long size1,
69 unsigned long start2, unsigned long size2)
70{
71 return start1 >= start2 && start1 + size1 <= start2 + size2;
72}
73
74/*
75 * Get the region_idx`th region from board config/ATAG and convert it to
76 * our internal format.
77 */
78static int __init get_fbmem_region(int region_idx, struct omapfb_mem_region *rg)
79{
80 const struct omap_fbmem_config *conf;
81 u32 paddr;
82
83 conf = omap_get_nr_config(OMAP_TAG_FBMEM,
84 struct omap_fbmem_config, region_idx);
85 if (conf == NULL)
86 return -ENOENT;
87
88 paddr = conf->start;
89 /*
90 * Low bits encode the page allocation mode, if high bits
91 * are zero. Otherwise we need a page aligned fixed
92 * address.
93 */
94 memset(rg, 0, sizeof(*rg));
95 rg->type = paddr & ~PAGE_MASK;
96 rg->paddr = paddr & PAGE_MASK;
97 rg->size = PAGE_ALIGN(conf->size);
98 return 0;
99}
100
101static int valid_sdram(unsigned long addr, unsigned long size)
102{
103 return memblock_is_region_memory(addr, size);
104}
105
106static int reserve_sdram(unsigned long addr, unsigned long size)
107{
108 if (memblock_is_region_reserved(addr, size))
109 return -EBUSY;
110 if (memblock_reserve(addr, size))
111 return -ENOMEM;
112 return 0;
113}
114
115/*
116 * Called from map_io. We need to call to this early enough so that we
117 * can reserve the fixed SDRAM regions before VM could get hold of them.
118 */
119void __init omapfb_reserve_sdram_memblock(void)
120{
121 unsigned long reserved = 0;
122 int i;
123
124 if (config_invalid)
125 return;
126
127 for (i = 0; ; i++) {
128 struct omapfb_mem_region rg;
129
130 if (get_fbmem_region(i, &rg) < 0)
131 break;
132
133 if (i == OMAPFB_PLANE_NUM) {
134 pr_err("Extraneous FB mem configuration entries\n");
135 config_invalid = 1;
136 return;
137 }
138
139 /* Check if it's our memory type. */
140 if (rg.type != OMAPFB_MEMTYPE_SDRAM)
141 continue;
142
143 /* Check if the region falls within SDRAM */
144 if (rg.paddr && !valid_sdram(rg.paddr, rg.size))
145 continue;
146
147 if (rg.size == 0) {
148 pr_err("Zero size for FB region %d\n", i);
149 config_invalid = 1;
150 return;
151 }
152
153 if (rg.paddr) {
154 if (reserve_sdram(rg.paddr, rg.size)) {
155 pr_err("Trying to use reserved memory for FB region %d\n",
156 i);
157 config_invalid = 1;
158 return;
159 }
160 reserved += rg.size;
161 }
162
163 if (omapfb_config.mem_desc.region[i].size) {
164 pr_err("FB region %d already set\n", i);
165 config_invalid = 1;
166 return;
167 }
168
169 omapfb_config.mem_desc.region[i] = rg;
170 configured_regions++;
171 }
172 omapfb_config.mem_desc.region_cnt = i;
173 if (reserved)
174 pr_info("Reserving %lu bytes SDRAM for frame buffer\n",
175 reserved);
176}
177
178static int __init omap_init_fb(void) 59static int __init omap_init_fb(void)
179{ 60{
180 const struct omap_lcd_config *conf; 61 const struct omap_lcd_config *conf;
181 62
182 if (config_invalid)
183 return 0;
184 if (configured_regions != omapfb_config.mem_desc.region_cnt) {
185 printk(KERN_ERR "Invalid FB mem configuration entries\n");
186 return 0;
187 }
188 conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config); 63 conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config);
189 if (conf == NULL) { 64 if (conf == NULL)
190 if (configured_regions)
191 /* FB mem config, but no LCD config? */
192 printk(KERN_ERR "Missing LCD configuration\n");
193 return 0; 65 return 0;
194 } 66
195 omapfb_config.lcd = *conf; 67 omapfb_config.lcd = *conf;
196 68
197 return platform_device_register(&omap_fb_device); 69 return platform_device_register(&omap_fb_device);
@@ -227,18 +99,10 @@ static int __init omap_init_fb(void)
227 99
228arch_initcall(omap_init_fb); 100arch_initcall(omap_init_fb);
229 101
230void omapfb_reserve_sdram_memblock(void)
231{
232}
233
234#else 102#else
235 103
236void omapfb_set_platform_data(struct omapfb_platform_data *data) 104void omapfb_set_platform_data(struct omapfb_platform_data *data)
237{ 105{
238} 106}
239 107
240void omapfb_reserve_sdram_memblock(void)
241{
242}
243
244#endif 108#endif
diff --git a/include/linux/omapfb.h b/include/linux/omapfb.h
index 85cad31ca3d9..7ab9cebf9164 100644
--- a/include/linux/omapfb.h
+++ b/include/linux/omapfb.h
@@ -254,7 +254,6 @@ struct omapfb_platform_data {
254 254
255/* in arch/arm/plat-omap/fb.c */ 255/* in arch/arm/plat-omap/fb.c */
256extern void omapfb_set_platform_data(struct omapfb_platform_data *data); 256extern void omapfb_set_platform_data(struct omapfb_platform_data *data);
257extern void omapfb_reserve_sdram_memblock(void);
258 257
259#endif 258#endif
260 259