Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 27 Aug 2007 22:06:28 +0000 (15:06 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Mon, 27 Aug 2007 22:06:28 +0000 (15:06 -0700)
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6:
  [SPARC32]: Make flush_tlb_kernel_range() an inline function.
  [SERIAL]: Fix 32-bit warnings in sunzilog.c and sunsu.c
  [SPARC32]: Kill unused vars and macros from prom/console.c
  [SPARC32]: Add __cmpdi2() libcall implementation ala. MIPS.
  [VIDEO]: Do not prom_halt() in cg3 and bw2 device probe.
  [SUNVDC]: Use slice 0xff on VD_DISK_TYPE_DISK.

arch/sparc/lib/Makefile
arch/sparc/lib/cmpdi2.c [new file with mode: 0644]
arch/sparc/lib/libgcc.h [new file with mode: 0644]
arch/sparc/prom/console.c
drivers/block/sunvdc.c
drivers/serial/sunsu.c
drivers/serial/sunzilog.c
drivers/video/bw2.c
drivers/video/cg3.c
include/asm-sparc/tlbflush.h

index 9ddc5b9ce3bd7eebb01a8209cde9d5bdcffaed6d..76effdbea07576ced82c8415e5d115e2971c6174 100644 (file)
@@ -8,6 +8,7 @@ lib-y := mul.o rem.o sdiv.o udiv.o umul.o urem.o ashrdi3.o memcpy.o memset.o \
          strlen.o checksum.o blockops.o memscan.o memcmp.o strncmp.o \
         strncpy_from_user.o divdi3.o udivdi3.o strlen_user.o \
         copy_user.o locks.o atomic.o \
-        lshrdi3.o ashldi3.o rwsem.o muldi3.o bitext.o
+        lshrdi3.o ashldi3.o rwsem.o muldi3.o bitext.o \
+        cmpdi2.o
 
 obj-y += iomap.o atomic32.o
diff --git a/arch/sparc/lib/cmpdi2.c b/arch/sparc/lib/cmpdi2.c
new file mode 100644 (file)
index 0000000..8c13064
--- /dev/null
@@ -0,0 +1,27 @@
+#include <linux/module.h>
+
+#include "libgcc.h"
+
+word_type __cmpdi2(long long a, long long b)
+{
+       const DWunion au = {
+               .ll = a
+       };
+       const DWunion bu = {
+               .ll = b
+       };
+
+       if (au.s.high < bu.s.high)
+               return 0;
+       else if (au.s.high > bu.s.high)
+               return 2;
+
+       if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
+               return 0;
+       else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
+               return 2;
+
+       return 1;
+}
+
+EXPORT_SYMBOL(__cmpdi2);
diff --git a/arch/sparc/lib/libgcc.h b/arch/sparc/lib/libgcc.h
new file mode 100644 (file)
index 0000000..b84fd79
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef __ASM_LIBGCC_H
+#define __ASM_LIBGCC_H
+
+#include <asm/byteorder.h>
+
+typedef int word_type __attribute__ ((mode (__word__)));
+
+struct DWstruct {
+       int high, low;
+};
+
+typedef union
+{
+       struct DWstruct s;
+       long long ll;
+} DWunion;
+
+#endif /* __ASM_LIBGCC_H */
index 8d1cfb0d5068544205cdda1e516cb65636ed31bc..2a007a78441512be1fc7b5aa8af5656d660980aa 100644 (file)
@@ -17,9 +17,6 @@
 
 extern void restore_current(void);
 
-static char con_name_jmc[] = "/obio/su@"; /* "/obio/su@0,3002f8"; */
-#define CON_SIZE_JMC   (sizeof(con_name_jmc))
-
 /* Non blocking get character from console input device, returns -1
  * if no input was taken.  This can be used for polling.
  */
index 4dff49256ac2943e922ea4addfe3d86db6d237d2..317a790c153b91c7748972dfa78890e64f13c7fb 100644 (file)
@@ -417,7 +417,7 @@ static int __send_request(struct request *req)
        desc->req_id = port->req_id;
        desc->operation = op;
        if (port->vdisk_type == VD_DISK_TYPE_DISK) {
-               desc->slice = 2;
+               desc->slice = 0xff;
        } else {
                desc->slice = 0;
        }
index 79b13685bdfa45b7dc12f583f1486492f06c7992..e074943feff536bc6be21b435acb527a6453c75b 100644 (file)
@@ -1198,10 +1198,11 @@ static int __init sunsu_kbd_ms_init(struct uart_sunsu_port *up)
        if (up->port.type == PORT_UNKNOWN)
                return -ENODEV;
 
-       printk("%s: %s port at %lx, irq %u\n",
+       printk("%s: %s port at %llx, irq %u\n",
               to_of_device(up->port.dev)->node->full_name,
               (up->su_type == SU_PORT_KBD) ? "Keyboard" : "Mouse",
-              up->port.mapbase, up->port.irq);
+              (unsigned long long) up->port.mapbase,
+              up->port.irq);
 
 #ifdef CONFIG_SERIO
        serio = &up->serio;
index 1d262c0c613fadbebddde44548d167eb9ec322ce..283bef0d24cb47a0fa0e956af5ef5a95c800a9ce 100644 (file)
@@ -1431,14 +1431,16 @@ static int __devinit zs_probe(struct of_device *op, const struct of_device_id *m
                        return err;
                }
        } else {
-               printk(KERN_INFO "%s: Keyboard at MMIO 0x%lx (irq = %d) "
+               printk(KERN_INFO "%s: Keyboard at MMIO 0x%llx (irq = %d) "
                       "is a %s\n",
-                      op->dev.bus_id, up[0].port.mapbase, op->irqs[0],
-                      sunzilog_type (&up[0].port));
-               printk(KERN_INFO "%s: Mouse at MMIO 0x%lx (irq = %d) "
+                      op->dev.bus_id,
+                      (unsigned long long) up[0].port.mapbase,
+                      op->irqs[0], sunzilog_type(&up[0].port));
+               printk(KERN_INFO "%s: Mouse at MMIO 0x%llx (irq = %d) "
                       "is a %s\n",
-                      op->dev.bus_id, up[1].port.mapbase, op->irqs[0],
-                      sunzilog_type (&up[1].port));
+                      op->dev.bus_id,
+                      (unsigned long long) up[1].port.mapbase,
+                      op->irqs[0], sunzilog_type(&up[1].port));
        }
 
        dev_set_drvdata(&op->dev, &up[0]);
index 718b9f83736e51f81bfca1db17d3dc452435ea74..833b10c840646e69de4e95954b10a10ddcf5df03 100644 (file)
@@ -233,9 +233,9 @@ static u8 bw2regs_66hz[] __devinitdata = {
        0x10, 0x20,     0
 };
 
-static void __devinit bw2_do_default_mode(struct bw2_par *par,
-                                         struct fb_info *info,
-                                         int *linebytes)
+static int __devinit bw2_do_default_mode(struct bw2_par *par,
+                                        struct fb_info *info,
+                                        int *linebytes)
 {
        u8 status, mon;
        u8 *p;
@@ -266,17 +266,18 @@ static void __devinit bw2_do_default_mode(struct bw2_par *par,
                break;
 
        case BWTWO_SR_ID_NOCONN:
-               return;
+               return 0;
 
        default:
-               prom_printf("bw2: can't handle SR %02x\n",
-                           status);
-               prom_halt();
+               printk(KERN_ERR "bw2: can't handle SR %02x\n",
+                      status);
+               return -EINVAL;
        }
        for ( ; *p; p += 2) {
                u8 __iomem *regp = &((u8 __iomem *)par->regs)[p[0]];
                sbus_writeb(p[1], regp);
        }
+       return 0;
 }
 
 static int __devinit bw2_probe(struct of_device *op, const struct of_device_id *match)
@@ -312,8 +313,11 @@ static int __devinit bw2_probe(struct of_device *op, const struct of_device_id *
        if (!par->regs)
                goto out_release_fb;
 
-       if (!of_find_property(dp, "width", NULL))
-               bw2_do_default_mode(par, info, &linebytes);
+       if (!of_find_property(dp, "width", NULL)) {
+               err = bw2_do_default_mode(par, info, &linebytes);
+               if (err)
+                       goto out_unmap_regs;
+       }
 
        par->fbsize = PAGE_ALIGN(linebytes * info->var.yres);
 
index 5741b46ade1be0b0780d07a79f8e02cd41de98be..a5c7fb331527c03038d7b42d73830de306fbab4f 100644 (file)
@@ -315,7 +315,7 @@ static u_char cg3_dacvals[] __devinitdata = {
        4, 0xff,        5, 0x00,        6, 0x70,        7, 0x00,        0
 };
 
-static void __devinit cg3_do_default_mode(struct cg3_par *par)
+static int __devinit cg3_do_default_mode(struct cg3_par *par)
 {
        enum cg3_type type;
        u8 *p;
@@ -332,10 +332,9 @@ static void __devinit cg3_do_default_mode(struct cg3_par *par)
                        else
                                type = CG3_AT_66HZ;
                } else {
-                       prom_printf("cgthree: can't handle SR %02x\n",
-                                   status);
-                       prom_halt();
-                       return;
+                       printk(KERN_ERR "cgthree: can't handle SR %02x\n",
+                              status);
+                       return -EINVAL;
                }
        }
 
@@ -351,6 +350,7 @@ static void __devinit cg3_do_default_mode(struct cg3_par *par)
                regp = (u8 __iomem *)&par->regs->cmap.control;
                sbus_writeb(p[1], regp);
        }
+       return 0;
 }
 
 static int __devinit cg3_probe(struct of_device *op,
@@ -400,8 +400,11 @@ static int __devinit cg3_probe(struct of_device *op,
 
        cg3_blank(0, info);
 
-       if (!of_find_property(dp, "width", NULL))
-               cg3_do_default_mode(par);
+       if (!of_find_property(dp, "width", NULL)) {
+               err = cg3_do_default_mode(par);
+               if (err)
+                       goto out_unmap_screen;
+       }
 
        if (fb_alloc_cmap(&info->cmap, 256, 0))
                goto out_unmap_screen;
index 4a3b66618e753a9bd4edf287080ad52f94e80a80..a619da5cfaa9f5d0e1b9321859692df34a9566b9 100644 (file)
@@ -57,6 +57,10 @@ BTFIXUPDEF_CALL(void, flush_tlb_page, struct vm_area_struct *, unsigned long)
 /*
  * This is a kludge, until I know better. --zaitcev XXX
  */
-#define flush_tlb_kernel_range(start, end) flush_tlb_all()
+static inline void flush_tlb_kernel_range(unsigned long start,
+                                         unsigned long end)
+{
+       flush_tlb_all();
+}
 
 #endif /* _SPARC_TLBFLUSH_H */