aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/amifb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/amifb.c')
-rw-r--r--drivers/video/amifb.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/drivers/video/amifb.c b/drivers/video/amifb.c
index e5d6b56d444..5ea6596dd82 100644
--- a/drivers/video/amifb.c
+++ b/drivers/video/amifb.c
@@ -2224,22 +2224,23 @@ static int amifb_ioctl(struct fb_info *info,
2224 * Allocate, Clear and Align a Block of Chip Memory 2224 * Allocate, Clear and Align a Block of Chip Memory
2225 */ 2225 */
2226 2226
2227static u_long unaligned_chipptr = 0; 2227static void *aligned_chipptr;
2228 2228
2229static inline u_long __init chipalloc(u_long size) 2229static inline u_long __init chipalloc(u_long size)
2230{ 2230{
2231 size += PAGE_SIZE-1; 2231 aligned_chipptr = amiga_chip_alloc(size, "amifb [RAM]");
2232 if (!(unaligned_chipptr = (u_long)amiga_chip_alloc(size, 2232 if (!aligned_chipptr) {
2233 "amifb [RAM]"))) 2233 pr_err("amifb: No Chip RAM for frame buffer");
2234 panic("No Chip RAM for frame buffer"); 2234 return 0;
2235 memset((void *)unaligned_chipptr, 0, size); 2235 }
2236 return PAGE_ALIGN(unaligned_chipptr); 2236 memset(aligned_chipptr, 0, size);
2237 return (u_long)aligned_chipptr;
2237} 2238}
2238 2239
2239static inline void chipfree(void) 2240static inline void chipfree(void)
2240{ 2241{
2241 if (unaligned_chipptr) 2242 if (aligned_chipptr)
2242 amiga_chip_free((void *)unaligned_chipptr); 2243 amiga_chip_free(aligned_chipptr);
2243} 2244}
2244 2245
2245 2246
@@ -2295,7 +2296,7 @@ default_chipset:
2295 defmode = amiga_vblank == 50 ? DEFMODE_PAL 2296 defmode = amiga_vblank == 50 ? DEFMODE_PAL
2296 : DEFMODE_NTSC; 2297 : DEFMODE_NTSC;
2297 if (amiga_chip_avail()-CHIPRAM_SAFETY_LIMIT > 2298 if (amiga_chip_avail()-CHIPRAM_SAFETY_LIMIT >
2298 VIDEOMEMSIZE_ECS_1M) 2299 VIDEOMEMSIZE_ECS_2M)
2299 fb_info.fix.smem_len = VIDEOMEMSIZE_ECS_2M; 2300 fb_info.fix.smem_len = VIDEOMEMSIZE_ECS_2M;
2300 else 2301 else
2301 fb_info.fix.smem_len = VIDEOMEMSIZE_ECS_1M; 2302 fb_info.fix.smem_len = VIDEOMEMSIZE_ECS_1M;
@@ -2312,7 +2313,7 @@ default_chipset:
2312 maxfmode = TAG_FMODE_4; 2313 maxfmode = TAG_FMODE_4;
2313 defmode = DEFMODE_AGA; 2314 defmode = DEFMODE_AGA;
2314 if (amiga_chip_avail()-CHIPRAM_SAFETY_LIMIT > 2315 if (amiga_chip_avail()-CHIPRAM_SAFETY_LIMIT >
2315 VIDEOMEMSIZE_AGA_1M) 2316 VIDEOMEMSIZE_AGA_2M)
2316 fb_info.fix.smem_len = VIDEOMEMSIZE_AGA_2M; 2317 fb_info.fix.smem_len = VIDEOMEMSIZE_AGA_2M;
2317 else 2318 else
2318 fb_info.fix.smem_len = VIDEOMEMSIZE_AGA_1M; 2319 fb_info.fix.smem_len = VIDEOMEMSIZE_AGA_1M;
@@ -2385,6 +2386,10 @@ default_chipset:
2385 DUMMYSPRITEMEMSIZE+ 2386 DUMMYSPRITEMEMSIZE+
2386 COPINITSIZE+ 2387 COPINITSIZE+
2387 4*COPLISTSIZE); 2388 4*COPLISTSIZE);
2389 if (!chipptr) {
2390 err = -ENOMEM;
2391 goto amifb_error;
2392 }
2388 2393
2389 assignchunk(videomemory, u_long, chipptr, fb_info.fix.smem_len); 2394 assignchunk(videomemory, u_long, chipptr, fb_info.fix.smem_len);
2390 assignchunk(spritememory, u_long, chipptr, SPRITEMEMSIZE); 2395 assignchunk(spritememory, u_long, chipptr, SPRITEMEMSIZE);