powerpc: Fix platinumfb framebuffer
PATCH 1/1 powerpc: Fix platinumfb framebuffer
powerpc: Fix platinumfb resource handling
Current kernels have a non-working platinumfb due to some resource management issues. This fixes it.
Signed-off-by Benjamin Herrenschmidt <[email protected]>
---
Note: platinumfb is a powermac only driver
drivers/video/platinumfb.c +26 -22
@@ -17,6 +17,8 @@* more details. */ +#undef DEBUG +#include <linux/module.h> #include <linux/kernel.h> #include <linux/errno.h>
@@ -535,33 +537,35 @@ static int __devinit platinumfb_probe(stvolatile __u8 *fbuffer;int bank0, bank1, bank2, bank3, rc; -printk (KERN_INFO "platinumfb: Found Apple Platinum video hardware\n" ); +dev_info (&odev->dev,"Found Apple Platinum video hardware\n" ); info =framebuffer_alloc (sizeof (*pinfo), &odev->dev); -if (info ==NULL ) +if (info ==NULL ) { +dev_err (&odev->dev,"Failed to allocate fbdev !\n" );return -ENOMEM ; + } pinfo = info->par;if (of_address_to_resource (dp,0 , &pinfo->rsrc_reg) ||of_address_to_resource (dp,1 , &pinfo->rsrc_fb)) { -printk (KERN_ERR "platinumfb: Can't get resources\n" ); -framebuffer_release (info); -return -ENXIO ; - } -if (!request_mem_region (pinfo->rsrc_reg.start, - pinfo->rsrc_reg.start - - pinfo->rsrc_reg.end +1 , -"platinumfb registers" )) { +dev_err (&odev->dev,"Can't get resources\n" );framebuffer_release (info);return -ENXIO ; } +dev_dbg (&odev->dev," registers : 0x%llx...0x%llx\n" , + (unsigned long long )pinfo->rsrc_reg.start, + (unsigned long long )pinfo->rsrc_reg.end); +dev_dbg (&odev->dev," framebuffer: 0x%llx...0x%llx\n" , + (unsigned long long )pinfo->rsrc_fb.start, + (unsigned long long )pinfo->rsrc_fb.end); + +/* Do not try to request register space, they overlap with the +* northbridge and that can fail. Only request framebuffer +*/ if (!request_mem_region (pinfo->rsrc_fb.start, - pinfo->rsrc_fb.start - - pinfo->rsrc_fb.end +1 , + pinfo->rsrc_fb.end - pinfo->rsrc_fb.start +1 ,"platinumfb framebuffer" )) { -release_mem_region (pinfo->rsrc_reg.start, - pinfo->rsrc_reg.end - - pinfo->rsrc_reg.start +1 ); +printk (KERN_ERR "platinumfb: Can't request framebuffer !\n" );framebuffer_release (info);return -ENXIO ; }
@@ -600,7 +604,8 @@ static int __devinit platinumfb_probe(st bank2 = fbuffer[0x200000 ] ==0x56 ; bank3 = fbuffer[0x300000 ] ==0x78 ; pinfo->total_vram = (bank0 + bank1 + bank2 + bank3) *0x100000 ; -printk (KERN_INFO "platinumfb: Total VRAM = %dMB (%d%d%d%d)\n" , (int ) (pinfo->total_vram /1024 /1024 ), +printk (KERN_INFO "platinumfb: Total VRAM = %dMB (%d%d%d%d)\n" , + (unsigned int ) (pinfo->total_vram /1024 /1024 ), bank3, bank2, bank1, bank0);/*
@@ -644,16 +649,15 @@ static int __devexit platinumfb_remove(sunregister_framebuffer (info);/* Unmap frame buffer and registers */ +iounmap (pinfo->frame_buffer); +iounmap (pinfo->platinum_regs); +iounmap (pinfo->cmap_regs); +release_mem_region (pinfo->rsrc_fb.start, pinfo->rsrc_fb.end - pinfo->rsrc_fb.start +1 ); -release_mem_region (pinfo->rsrc_reg.start, - pinfo->rsrc_reg.end - - pinfo->rsrc_reg.start +1 ); -iounmap (pinfo->frame_buffer); -iounmap (pinfo->platinum_regs); +release_mem_region (pinfo->cmap_regs_phys,0x1000 ); -iounmap (pinfo->cmap_regs);framebuffer_release (info);
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/