This fixes atyfb to not truncate 64 bits resources on 32 bits
platforms. Unfortunately, there are still issues with addresses
returned to userspace via struct fb_fix_screeninfo. This will
have to be dealt with separately.

Signed-off-by: Benjamin Herrenschmidt <[EMAIL PROTECTED]>
---

 drivers/video/aty/atyfb_base.c |   14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

--- linux-work.orig/drivers/video/aty/atyfb_base.c      2008-04-22 
11:21:46.000000000 +1000
+++ linux-work/drivers/video/aty/atyfb_base.c   2008-04-22 11:23:58.000000000 
+1000
@@ -2842,7 +2842,7 @@ static int atyfb_setcolreg(u_int regno, 
 #ifdef __sparc__
 
 static int __devinit atyfb_setup_sparc(struct pci_dev *pdev,
-                       struct fb_info *info, unsigned long addr)
+                       struct fb_info *info, resource_size_t addr)
 {
        struct atyfb_par *par = info->par;
        struct device_node *dp;
@@ -3334,11 +3334,11 @@ static int __devinit init_from_bios(stru
 }
 #endif /* __i386__ */
 
-static int __devinit atyfb_setup_generic(struct pci_dev *pdev, struct fb_info 
*info, unsigned long addr)
+static int __devinit atyfb_setup_generic(struct pci_dev *pdev, struct fb_info 
*info, resource_size_t addr)
 {
        struct atyfb_par *par = info->par;
        u16 tmp;
-       unsigned long raddr;
+       resource_size_t raddr;
        struct resource *rrp;
        int ret = 0;
 
@@ -3351,8 +3351,8 @@ static int __devinit atyfb_setup_generic
                PRINTKI("using auxiliary register aperture\n");
        }
 
-       info->fix.mmio_start = raddr;
-       par->ati_regbase = ioremap(info->fix.mmio_start, 0x1000);
+       info->fix.mmio_start = (unsigned long)raddr;
+       par->ati_regbase = ioremap(raddr, 0x1000);
        if (par->ati_regbase == 0)
                return -ENOMEM;
 
@@ -3374,7 +3374,7 @@ static int __devinit atyfb_setup_generic
 #endif
 
        /* Map in frame buffer */
-       info->fix.smem_start = addr;
+       info->fix.smem_start = (unsigned long)addr;
        info->screen_base = ioremap(addr, 0x800000);
        if (info->screen_base == NULL) {
                ret = -ENOMEM;
@@ -3411,7 +3411,7 @@ atyfb_setup_generic_fail:
 
 static int __devinit atyfb_pci_probe(struct pci_dev *pdev, const struct 
pci_device_id *ent)
 {
-       unsigned long addr, res_start, res_size;
+       resource_size_t addr, res_start, res_size;
        struct fb_info *info;
        struct resource *rp;
        struct atyfb_par *par;
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to