Commit 582fd487 authored by Linus Torvalds's avatar Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6

parents 7ab501db ba639933
...@@ -21,6 +21,10 @@ config GENERIC_ISA_DMA ...@@ -21,6 +21,10 @@ config GENERIC_ISA_DMA
bool bool
default y default y
config GENERIC_IOMAP
bool
default y
source "init/Kconfig" source "init/Kconfig"
menu "General machine setup" menu "General machine setup"
......
...@@ -5,6 +5,7 @@ CONFIG_MMU=y ...@@ -5,6 +5,7 @@ CONFIG_MMU=y
CONFIG_UID16=y CONFIG_UID16=y
CONFIG_HIGHMEM=y CONFIG_HIGHMEM=y
CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
# #
# Code maturity level options # Code maturity level options
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
/* This is trivial with the new code... */ /* This is trivial with the new code... */
.globl do_fpdis .globl do_fpdis
do_fpdis: do_fpdis:
sethi %hi(TSTATE_PEF), %g4 ! IEU0 sethi %hi(TSTATE_PEF), %g4
rdpr %tstate, %g5 rdpr %tstate, %g5
andcc %g5, %g4, %g0 andcc %g5, %g4, %g0
be,pt %xcc, 1f be,pt %xcc, 1f
...@@ -50,18 +50,18 @@ do_fpdis: ...@@ -50,18 +50,18 @@ do_fpdis:
add %g0, %g0, %g0 add %g0, %g0, %g0
ba,a,pt %xcc, rtrap_clr_l6 ba,a,pt %xcc, rtrap_clr_l6
1: ldub [%g6 + TI_FPSAVED], %g5 ! Load Group 1: ldub [%g6 + TI_FPSAVED], %g5
wr %g0, FPRS_FEF, %fprs ! LSU Group+4bubbles wr %g0, FPRS_FEF, %fprs
andcc %g5, FPRS_FEF, %g0 ! IEU1 Group andcc %g5, FPRS_FEF, %g0
be,a,pt %icc, 1f ! CTI be,a,pt %icc, 1f
clr %g7 ! IEU0 clr %g7
ldx [%g6 + TI_GSR], %g7 ! Load Group ldx [%g6 + TI_GSR], %g7
1: andcc %g5, FPRS_DL, %g0 ! IEU1 1: andcc %g5, FPRS_DL, %g0
bne,pn %icc, 2f ! CTI bne,pn %icc, 2f
fzero %f0 ! FPA fzero %f0
andcc %g5, FPRS_DU, %g0 ! IEU1 Group andcc %g5, FPRS_DU, %g0
bne,pn %icc, 1f ! CTI bne,pn %icc, 1f
fzero %f2 ! FPA fzero %f2
faddd %f0, %f2, %f4 faddd %f0, %f2, %f4
fmuld %f0, %f2, %f6 fmuld %f0, %f2, %f6
faddd %f0, %f2, %f8 faddd %f0, %f2, %f8
...@@ -104,8 +104,10 @@ do_fpdis: ...@@ -104,8 +104,10 @@ do_fpdis:
add %g6, TI_FPREGS + 0xc0, %g2 add %g6, TI_FPREGS + 0xc0, %g2
faddd %f0, %f2, %f8 faddd %f0, %f2, %f8
fmuld %f0, %f2, %f10 fmuld %f0, %f2, %f10
ldda [%g1] ASI_BLK_S, %f32 ! grrr, where is ASI_BLK_NUCLEUS 8-( membar #Sync
ldda [%g1] ASI_BLK_S, %f32
ldda [%g2] ASI_BLK_S, %f48 ldda [%g2] ASI_BLK_S, %f48
membar #Sync
faddd %f0, %f2, %f12 faddd %f0, %f2, %f12
fmuld %f0, %f2, %f14 fmuld %f0, %f2, %f14
faddd %f0, %f2, %f16 faddd %f0, %f2, %f16
...@@ -116,7 +118,6 @@ do_fpdis: ...@@ -116,7 +118,6 @@ do_fpdis:
fmuld %f0, %f2, %f26 fmuld %f0, %f2, %f26
faddd %f0, %f2, %f28 faddd %f0, %f2, %f28
fmuld %f0, %f2, %f30 fmuld %f0, %f2, %f30
membar #Sync
b,pt %xcc, fpdis_exit b,pt %xcc, fpdis_exit
nop nop
2: andcc %g5, FPRS_DU, %g0 2: andcc %g5, FPRS_DU, %g0
...@@ -133,8 +134,10 @@ do_fpdis: ...@@ -133,8 +134,10 @@ do_fpdis:
add %g6, TI_FPREGS + 0x40, %g2 add %g6, TI_FPREGS + 0x40, %g2
faddd %f32, %f34, %f36 faddd %f32, %f34, %f36
fmuld %f32, %f34, %f38 fmuld %f32, %f34, %f38
ldda [%g1] ASI_BLK_S, %f0 ! grrr, where is ASI_BLK_NUCLEUS 8-( membar #Sync
ldda [%g1] ASI_BLK_S, %f0
ldda [%g2] ASI_BLK_S, %f16 ldda [%g2] ASI_BLK_S, %f16
membar #Sync
faddd %f32, %f34, %f40 faddd %f32, %f34, %f40
fmuld %f32, %f34, %f42 fmuld %f32, %f34, %f42
faddd %f32, %f34, %f44 faddd %f32, %f34, %f44
...@@ -147,7 +150,6 @@ do_fpdis: ...@@ -147,7 +150,6 @@ do_fpdis:
fmuld %f32, %f34, %f58 fmuld %f32, %f34, %f58
faddd %f32, %f34, %f60 faddd %f32, %f34, %f60
fmuld %f32, %f34, %f62 fmuld %f32, %f34, %f62
membar #Sync
ba,pt %xcc, fpdis_exit ba,pt %xcc, fpdis_exit
nop nop
3: mov SECONDARY_CONTEXT, %g3 3: mov SECONDARY_CONTEXT, %g3
...@@ -158,7 +160,8 @@ do_fpdis: ...@@ -158,7 +160,8 @@ do_fpdis:
stxa %g2, [%g3] ASI_DMMU stxa %g2, [%g3] ASI_DMMU
membar #Sync membar #Sync
mov 0x40, %g2 mov 0x40, %g2
ldda [%g1] ASI_BLK_S, %f0 ! grrr, where is ASI_BLK_NUCLEUS 8-( membar #Sync
ldda [%g1] ASI_BLK_S, %f0
ldda [%g1 + %g2] ASI_BLK_S, %f16 ldda [%g1 + %g2] ASI_BLK_S, %f16
add %g1, 0x80, %g1 add %g1, 0x80, %g1
ldda [%g1] ASI_BLK_S, %f32 ldda [%g1] ASI_BLK_S, %f32
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <asm/system.h> #include <asm/system.h>
#include <asm/ebus.h> #include <asm/ebus.h>
#include <asm/isa.h>
#include <asm/auxio.h> #include <asm/auxio.h>
#include <linux/unistd.h> #include <linux/unistd.h>
...@@ -100,46 +101,83 @@ static int powerd(void *__unused) ...@@ -100,46 +101,83 @@ static int powerd(void *__unused)
return 0; return 0;
} }
static int __init has_button_interrupt(struct linux_ebus_device *edev) static int __init has_button_interrupt(unsigned int irq, int prom_node)
{ {
if (edev->irqs[0] == PCI_IRQ_NONE) if (irq == PCI_IRQ_NONE)
return 0; return 0;
if (!prom_node_has_property(edev->prom_node, "button")) if (!prom_node_has_property(prom_node, "button"))
return 0; return 0;
return 1; return 1;
} }
void __init power_init(void) static int __init power_probe_ebus(struct resource **resp, unsigned int *irq_p, int *prom_node_p)
{ {
struct linux_ebus *ebus; struct linux_ebus *ebus;
struct linux_ebus_device *edev; struct linux_ebus_device *edev;
for_each_ebus(ebus) {
for_each_ebusdev(edev, ebus) {
if (!strcmp(edev->prom_name, "power")) {
*resp = &edev->resource[0];
*irq_p = edev->irqs[0];
*prom_node_p = edev->prom_node;
return 0;
}
}
}
return -ENODEV;
}
static int __init power_probe_isa(struct resource **resp, unsigned int *irq_p, int *prom_node_p)
{
struct sparc_isa_bridge *isa_bus;
struct sparc_isa_device *isa_dev;
for_each_isa(isa_bus) {
for_each_isadev(isa_dev, isa_bus) {
if (!strcmp(isa_dev->prom_name, "power")) {
*resp = &isa_dev->resource;
*irq_p = isa_dev->irq;
*prom_node_p = isa_dev->prom_node;
return 0;
}
}
}
return -ENODEV;
}
void __init power_init(void)
{
struct resource *res = NULL;
unsigned int irq;
int prom_node;
static int invoked; static int invoked;
if (invoked) if (invoked)
return; return;
invoked = 1; invoked = 1;
for_each_ebus(ebus) { if (!power_probe_ebus(&res, &irq, &prom_node))
for_each_ebusdev(edev, ebus) { goto found;
if (!strcmp(edev->prom_name, "power"))
goto found; if (!power_probe_isa(&res, &irq, &prom_node))
} goto found;
}
return; return;
found: found:
power_reg = ioremap(edev->resource[0].start, 0x4); power_reg = ioremap(res->start, 0x4);
printk("power: Control reg at %p ... ", power_reg); printk("power: Control reg at %p ... ", power_reg);
poweroff_method = machine_halt; /* able to use the standard halt */ poweroff_method = machine_halt; /* able to use the standard halt */
if (has_button_interrupt(edev)) { if (has_button_interrupt(irq, prom_node)) {
if (kernel_thread(powerd, NULL, CLONE_FS) < 0) { if (kernel_thread(powerd, NULL, CLONE_FS) < 0) {
printk("Failed to start power daemon.\n"); printk("Failed to start power daemon.\n");
return; return;
} }
printk("powerd running.\n"); printk("powerd running.\n");
if (request_irq(edev->irqs[0], if (request_irq(irq,
power_handler, SA_SHIRQ, "power", NULL) < 0) power_handler, SA_SHIRQ, "power", NULL) < 0)
printk("power: Error, cannot register IRQ handler.\n"); printk("power: Error, cannot register IRQ handler.\n");
} else { } else {
......
...@@ -312,32 +312,33 @@ kern_fpucheck: ldub [%g6 + TI_FPDEPTH], %l5 ...@@ -312,32 +312,33 @@ kern_fpucheck: ldub [%g6 + TI_FPDEPTH], %l5
wr %g1, FPRS_FEF, %fprs wr %g1, FPRS_FEF, %fprs
ldx [%o1 + %o5], %g1 ldx [%o1 + %o5], %g1
add %g6, TI_XFSR, %o1 add %g6, TI_XFSR, %o1
membar #StoreLoad | #LoadLoad
sll %o0, 8, %o2 sll %o0, 8, %o2
add %g6, TI_FPREGS, %o3 add %g6, TI_FPREGS, %o3
brz,pn %l6, 1f brz,pn %l6, 1f
add %g6, TI_FPREGS+0x40, %o4 add %g6, TI_FPREGS+0x40, %o4
membar #Sync
ldda [%o3 + %o2] ASI_BLK_P, %f0 ldda [%o3 + %o2] ASI_BLK_P, %f0
ldda [%o4 + %o2] ASI_BLK_P, %f16 ldda [%o4 + %o2] ASI_BLK_P, %f16
membar #Sync
1: andcc %l2, FPRS_DU, %g0 1: andcc %l2, FPRS_DU, %g0
be,pn %icc, 1f be,pn %icc, 1f
wr %g1, 0, %gsr wr %g1, 0, %gsr
add %o2, 0x80, %o2 add %o2, 0x80, %o2
membar #Sync
ldda [%o3 + %o2] ASI_BLK_P, %f32 ldda [%o3 + %o2] ASI_BLK_P, %f32
ldda [%o4 + %o2] ASI_BLK_P, %f48 ldda [%o4 + %o2] ASI_BLK_P, %f48
1: membar #Sync 1: membar #Sync
ldx [%o1 + %o5], %fsr ldx [%o1 + %o5], %fsr
2: stb %l5, [%g6 + TI_FPDEPTH] 2: stb %l5, [%g6 + TI_FPDEPTH]
ba,pt %xcc, rt_continue ba,pt %xcc, rt_continue
nop nop
5: wr %g0, FPRS_FEF, %fprs 5: wr %g0, FPRS_FEF, %fprs
membar #StoreLoad | #LoadLoad
sll %o0, 8, %o2 sll %o0, 8, %o2
add %g6, TI_FPREGS+0x80, %o3 add %g6, TI_FPREGS+0x80, %o3
add %g6, TI_FPREGS+0xc0, %o4 add %g6, TI_FPREGS+0xc0, %o4
membar #Sync
ldda [%o3 + %o2] ASI_BLK_P, %f32 ldda [%o3 + %o2] ASI_BLK_P, %f32
ldda [%o4 + %o2] ASI_BLK_P, %f48 ldda [%o4 + %o2] ASI_BLK_P, %f48
membar #Sync membar #Sync
......
...@@ -59,15 +59,17 @@ vis1: ldub [%g6 + TI_FPSAVED], %g3 ...@@ -59,15 +59,17 @@ vis1: ldub [%g6 + TI_FPSAVED], %g3
be,pn %icc, 9b be,pn %icc, 9b
add %g6, TI_FPREGS, %g2 add %g6, TI_FPREGS, %g2
andcc %o5, FPRS_DL, %g0 andcc %o5, FPRS_DL, %g0
membar #StoreStore | #LoadStore
be,pn %icc, 4f be,pn %icc, 4f
add %g6, TI_FPREGS+0x40, %g3 add %g6, TI_FPREGS+0x40, %g3
membar #Sync
stda %f0, [%g2 + %g1] ASI_BLK_P stda %f0, [%g2 + %g1] ASI_BLK_P
stda %f16, [%g3 + %g1] ASI_BLK_P stda %f16, [%g3 + %g1] ASI_BLK_P
membar #Sync
andcc %o5, FPRS_DU, %g0 andcc %o5, FPRS_DU, %g0
be,pn %icc, 5f be,pn %icc, 5f
4: add %g1, 128, %g1 4: add %g1, 128, %g1
membar #Sync
stda %f32, [%g2 + %g1] ASI_BLK_P stda %f32, [%g2 + %g1] ASI_BLK_P
stda %f48, [%g3 + %g1] ASI_BLK_P stda %f48, [%g3 + %g1] ASI_BLK_P
...@@ -87,7 +89,7 @@ vis1: ldub [%g6 + TI_FPSAVED], %g3 ...@@ -87,7 +89,7 @@ vis1: ldub [%g6 + TI_FPSAVED], %g3
sll %g1, 5, %g1 sll %g1, 5, %g1
add %g6, TI_FPREGS+0xc0, %g3 add %g6, TI_FPREGS+0xc0, %g3
wr %g0, FPRS_FEF, %fprs wr %g0, FPRS_FEF, %fprs
membar #StoreStore | #LoadStore membar #Sync
stda %f32, [%g2 + %g1] ASI_BLK_P stda %f32, [%g2 + %g1] ASI_BLK_P
stda %f48, [%g3 + %g1] ASI_BLK_P stda %f48, [%g3 + %g1] ASI_BLK_P
membar #Sync membar #Sync
...@@ -128,8 +130,8 @@ VISenterhalf: ...@@ -128,8 +130,8 @@ VISenterhalf:
be,pn %icc, 4f be,pn %icc, 4f
add %g6, TI_FPREGS, %g2 add %g6, TI_FPREGS, %g2
membar #StoreStore | #LoadStore
add %g6, TI_FPREGS+0x40, %g3 add %g6, TI_FPREGS+0x40, %g3
membar #Sync
stda %f0, [%g2 + %g1] ASI_BLK_P stda %f0, [%g2 + %g1] ASI_BLK_P
stda %f16, [%g3 + %g1] ASI_BLK_P stda %f16, [%g3 + %g1] ASI_BLK_P
membar #Sync membar #Sync
......
...@@ -288,6 +288,9 @@ static void p9100_init_one(struct sbus_dev *sdev) ...@@ -288,6 +288,9 @@ static void p9100_init_one(struct sbus_dev *sdev)
all->par.physbase = sdev->reg_addrs[2].phys_addr; all->par.physbase = sdev->reg_addrs[2].phys_addr;
sbusfb_fill_var(&all->info.var, sdev->prom_node, 8); sbusfb_fill_var(&all->info.var, sdev->prom_node, 8);
all->info.var.red.length = 8;
all->info.var.green.length = 8;
all->info.var.blue.length = 8;
linebytes = prom_getintdefault(sdev->prom_node, "linebytes", linebytes = prom_getintdefault(sdev->prom_node, "linebytes",
all->info.var.xres); all->info.var.xres);
...@@ -323,6 +326,7 @@ static void p9100_init_one(struct sbus_dev *sdev) ...@@ -323,6 +326,7 @@ static void p9100_init_one(struct sbus_dev *sdev)
kfree(all); kfree(all);
return; return;
} }
fb_set_cmap(&all->info.cmap, &all->info);
list_add(&all->list, &p9100_list); list_add(&all->list, &p9100_list);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment