diff options
Diffstat (limited to 'drivers/video/amifb.c')
| -rw-r--r-- | drivers/video/amifb.c | 27 |
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 | ||
| 2227 | static u_long unaligned_chipptr = 0; | 2227 | static void *aligned_chipptr; |
| 2228 | 2228 | ||
| 2229 | static inline u_long __init chipalloc(u_long size) | 2229 | static 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 | ||
| 2239 | static inline void chipfree(void) | 2240 | static 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); |
