Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* '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.
This commit is contained in:
commit
5a99efeaa5
10 changed files with 87 additions and 30 deletions
|
@ -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 \
|
strlen.o checksum.o blockops.o memscan.o memcmp.o strncmp.o \
|
||||||
strncpy_from_user.o divdi3.o udivdi3.o strlen_user.o \
|
strncpy_from_user.o divdi3.o udivdi3.o strlen_user.o \
|
||||||
copy_user.o locks.o atomic.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
|
obj-y += iomap.o atomic32.o
|
||||||
|
|
27
arch/sparc/lib/cmpdi2.c
Normal file
27
arch/sparc/lib/cmpdi2.c
Normal file
|
@ -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);
|
18
arch/sparc/lib/libgcc.h
Normal file
18
arch/sparc/lib/libgcc.h
Normal file
|
@ -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 */
|
|
@ -17,9 +17,6 @@
|
||||||
|
|
||||||
extern void restore_current(void);
|
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
|
/* Non blocking get character from console input device, returns -1
|
||||||
* if no input was taken. This can be used for polling.
|
* if no input was taken. This can be used for polling.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -417,7 +417,7 @@ static int __send_request(struct request *req)
|
||||||
desc->req_id = port->req_id;
|
desc->req_id = port->req_id;
|
||||||
desc->operation = op;
|
desc->operation = op;
|
||||||
if (port->vdisk_type == VD_DISK_TYPE_DISK) {
|
if (port->vdisk_type == VD_DISK_TYPE_DISK) {
|
||||||
desc->slice = 2;
|
desc->slice = 0xff;
|
||||||
} else {
|
} else {
|
||||||
desc->slice = 0;
|
desc->slice = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1198,10 +1198,11 @@ static int __init sunsu_kbd_ms_init(struct uart_sunsu_port *up)
|
||||||
if (up->port.type == PORT_UNKNOWN)
|
if (up->port.type == PORT_UNKNOWN)
|
||||||
return -ENODEV;
|
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,
|
to_of_device(up->port.dev)->node->full_name,
|
||||||
(up->su_type == SU_PORT_KBD) ? "Keyboard" : "Mouse",
|
(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
|
#ifdef CONFIG_SERIO
|
||||||
serio = &up->serio;
|
serio = &up->serio;
|
||||||
|
|
|
@ -1431,14 +1431,16 @@ static int __devinit zs_probe(struct of_device *op, const struct of_device_id *m
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
} else {
|
} 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",
|
"is a %s\n",
|
||||||
op->dev.bus_id, up[0].port.mapbase, op->irqs[0],
|
op->dev.bus_id,
|
||||||
sunzilog_type (&up[0].port));
|
(unsigned long long) up[0].port.mapbase,
|
||||||
printk(KERN_INFO "%s: Mouse at MMIO 0x%lx (irq = %d) "
|
op->irqs[0], sunzilog_type(&up[0].port));
|
||||||
|
printk(KERN_INFO "%s: Mouse at MMIO 0x%llx (irq = %d) "
|
||||||
"is a %s\n",
|
"is a %s\n",
|
||||||
op->dev.bus_id, up[1].port.mapbase, op->irqs[0],
|
op->dev.bus_id,
|
||||||
sunzilog_type (&up[1].port));
|
(unsigned long long) up[1].port.mapbase,
|
||||||
|
op->irqs[0], sunzilog_type(&up[1].port));
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_set_drvdata(&op->dev, &up[0]);
|
dev_set_drvdata(&op->dev, &up[0]);
|
||||||
|
|
|
@ -233,9 +233,9 @@ static u8 bw2regs_66hz[] __devinitdata = {
|
||||||
0x10, 0x20, 0
|
0x10, 0x20, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __devinit bw2_do_default_mode(struct bw2_par *par,
|
static int __devinit bw2_do_default_mode(struct bw2_par *par,
|
||||||
struct fb_info *info,
|
struct fb_info *info,
|
||||||
int *linebytes)
|
int *linebytes)
|
||||||
{
|
{
|
||||||
u8 status, mon;
|
u8 status, mon;
|
||||||
u8 *p;
|
u8 *p;
|
||||||
|
@ -266,17 +266,18 @@ static void __devinit bw2_do_default_mode(struct bw2_par *par,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BWTWO_SR_ID_NOCONN:
|
case BWTWO_SR_ID_NOCONN:
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
prom_printf("bw2: can't handle SR %02x\n",
|
printk(KERN_ERR "bw2: can't handle SR %02x\n",
|
||||||
status);
|
status);
|
||||||
prom_halt();
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
for ( ; *p; p += 2) {
|
for ( ; *p; p += 2) {
|
||||||
u8 __iomem *regp = &((u8 __iomem *)par->regs)[p[0]];
|
u8 __iomem *regp = &((u8 __iomem *)par->regs)[p[0]];
|
||||||
sbus_writeb(p[1], regp);
|
sbus_writeb(p[1], regp);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __devinit bw2_probe(struct of_device *op, const struct of_device_id *match)
|
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)
|
if (!par->regs)
|
||||||
goto out_release_fb;
|
goto out_release_fb;
|
||||||
|
|
||||||
if (!of_find_property(dp, "width", NULL))
|
if (!of_find_property(dp, "width", NULL)) {
|
||||||
bw2_do_default_mode(par, info, &linebytes);
|
err = bw2_do_default_mode(par, info, &linebytes);
|
||||||
|
if (err)
|
||||||
|
goto out_unmap_regs;
|
||||||
|
}
|
||||||
|
|
||||||
par->fbsize = PAGE_ALIGN(linebytes * info->var.yres);
|
par->fbsize = PAGE_ALIGN(linebytes * info->var.yres);
|
||||||
|
|
||||||
|
|
|
@ -315,7 +315,7 @@ static u_char cg3_dacvals[] __devinitdata = {
|
||||||
4, 0xff, 5, 0x00, 6, 0x70, 7, 0x00, 0
|
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;
|
enum cg3_type type;
|
||||||
u8 *p;
|
u8 *p;
|
||||||
|
@ -332,10 +332,9 @@ static void __devinit cg3_do_default_mode(struct cg3_par *par)
|
||||||
else
|
else
|
||||||
type = CG3_AT_66HZ;
|
type = CG3_AT_66HZ;
|
||||||
} else {
|
} else {
|
||||||
prom_printf("cgthree: can't handle SR %02x\n",
|
printk(KERN_ERR "cgthree: can't handle SR %02x\n",
|
||||||
status);
|
status);
|
||||||
prom_halt();
|
return -EINVAL;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,6 +350,7 @@ static void __devinit cg3_do_default_mode(struct cg3_par *par)
|
||||||
regp = (u8 __iomem *)&par->regs->cmap.control;
|
regp = (u8 __iomem *)&par->regs->cmap.control;
|
||||||
sbus_writeb(p[1], regp);
|
sbus_writeb(p[1], regp);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __devinit cg3_probe(struct of_device *op,
|
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);
|
cg3_blank(0, info);
|
||||||
|
|
||||||
if (!of_find_property(dp, "width", NULL))
|
if (!of_find_property(dp, "width", NULL)) {
|
||||||
cg3_do_default_mode(par);
|
err = cg3_do_default_mode(par);
|
||||||
|
if (err)
|
||||||
|
goto out_unmap_screen;
|
||||||
|
}
|
||||||
|
|
||||||
if (fb_alloc_cmap(&info->cmap, 256, 0))
|
if (fb_alloc_cmap(&info->cmap, 256, 0))
|
||||||
goto out_unmap_screen;
|
goto out_unmap_screen;
|
||||||
|
|
|
@ -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
|
* 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 */
|
#endif /* _SPARC_TLBFLUSH_H */
|
||||||
|
|
Loading…
Reference in a new issue