Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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

parents 7ab501db ba639933
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -21,6 +21,10 @@ config GENERIC_ISA_DMA
	bool
	default y

config GENERIC_IOMAP
	bool
	default y

source "init/Kconfig"

menu "General machine setup"
+1 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ CONFIG_MMU=y
CONFIG_UID16=y
CONFIG_HIGHMEM=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y

#
# Code maturity level options
+21 −18
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@
	/* This is trivial with the new code... */
	.globl		do_fpdis
do_fpdis:
	sethi		%hi(TSTATE_PEF), %g4					! IEU0
	sethi		%hi(TSTATE_PEF), %g4
	rdpr		%tstate, %g5
	andcc		%g5, %g4, %g0
	be,pt		%xcc, 1f
@@ -50,18 +50,18 @@ do_fpdis:
	add		%g0, %g0, %g0
	ba,a,pt		%xcc, rtrap_clr_l6

1:	ldub		[%g6 + TI_FPSAVED], %g5					! Load	Group
	wr		%g0, FPRS_FEF, %fprs					! LSU	Group+4bubbles
	andcc		%g5, FPRS_FEF, %g0					! IEU1	Group
	be,a,pt		%icc, 1f						! CTI
	 clr		%g7							! IEU0
	ldx		[%g6 + TI_GSR], %g7					! Load	Group
1:	andcc		%g5, FPRS_DL, %g0					! IEU1
	bne,pn		%icc, 2f						! CTI
	 fzero		%f0							! FPA
	andcc		%g5, FPRS_DU, %g0					! IEU1  Group
	bne,pn		%icc, 1f						! CTI
	 fzero		%f2							! FPA
1:	ldub		[%g6 + TI_FPSAVED], %g5
	wr		%g0, FPRS_FEF, %fprs
	andcc		%g5, FPRS_FEF, %g0
	be,a,pt		%icc, 1f
	 clr		%g7
	ldx		[%g6 + TI_GSR], %g7
1:	andcc		%g5, FPRS_DL, %g0
	bne,pn		%icc, 2f
	 fzero		%f0
	andcc		%g5, FPRS_DU, %g0
	bne,pn		%icc, 1f
	 fzero		%f2
	faddd		%f0, %f2, %f4
	fmuld		%f0, %f2, %f6
	faddd		%f0, %f2, %f8
@@ -104,8 +104,10 @@ do_fpdis:
	add		%g6, TI_FPREGS + 0xc0, %g2
	faddd		%f0, %f2, %f8
	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
	membar		#Sync
	faddd		%f0, %f2, %f12
	fmuld		%f0, %f2, %f14
	faddd		%f0, %f2, %f16
@@ -116,7 +118,6 @@ do_fpdis:
	fmuld		%f0, %f2, %f26
	faddd		%f0, %f2, %f28
	fmuld		%f0, %f2, %f30
	membar		#Sync
	b,pt		%xcc, fpdis_exit
	 nop
2:	andcc		%g5, FPRS_DU, %g0
@@ -133,8 +134,10 @@ do_fpdis:
	add		%g6, TI_FPREGS + 0x40, %g2
	faddd		%f32, %f34, %f36
	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
	membar		#Sync
	faddd		%f32, %f34, %f40
	fmuld		%f32, %f34, %f42
	faddd		%f32, %f34, %f44
@@ -147,7 +150,6 @@ do_fpdis:
	fmuld		%f32, %f34, %f58
	faddd		%f32, %f34, %f60
	fmuld		%f32, %f34, %f62
	membar		#Sync
	ba,pt		%xcc, fpdis_exit
	 nop
3:	mov		SECONDARY_CONTEXT, %g3
@@ -158,7 +160,8 @@ do_fpdis:
	stxa		%g2, [%g3] ASI_DMMU
	membar		#Sync
	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
	add		%g1, 0x80, %g1
	ldda		[%g1] ASI_BLK_S, %f32
+51 −13
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@

#include <asm/system.h>
#include <asm/ebus.h>
#include <asm/isa.h>
#include <asm/auxio.h>

#include <linux/unistd.h>
@@ -100,46 +101,83 @@ static int powerd(void *__unused)
	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;
	if (!prom_node_has_property(edev->prom_node, "button"))
	if (!prom_node_has_property(prom_node, "button"))
		return 0;

	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_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;

	if (invoked)
		return;
	invoked = 1;

	for_each_ebus(ebus) {
		for_each_ebusdev(edev, ebus) {
			if (!strcmp(edev->prom_name, "power"))
	if (!power_probe_ebus(&res, &irq, &prom_node))
		goto found;
		}
	}

	if (!power_probe_isa(&res, &irq, &prom_node))
		goto found;

	return;

found:
	power_reg = ioremap(edev->resource[0].start, 0x4);
	power_reg = ioremap(res->start, 0x4);
	printk("power: Control reg at %p ... ", power_reg);
	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) {
			printk("Failed to start power daemon.\n");
			return;
		}
		printk("powerd running.\n");

		if (request_irq(edev->irqs[0],
		if (request_irq(irq,
				power_handler, SA_SHIRQ, "power", NULL) < 0)
			printk("power: Error, cannot register IRQ handler.\n");
	} else {
+4 −3
Original line number Diff line number Diff line
@@ -312,32 +312,33 @@ kern_fpucheck: ldub [%g6 + TI_FPDEPTH], %l5
		wr			%g1, FPRS_FEF, %fprs
		ldx			[%o1 + %o5], %g1
		add			%g6, TI_XFSR, %o1
		membar			#StoreLoad | #LoadLoad
		sll			%o0, 8, %o2
		add			%g6, TI_FPREGS, %o3
		brz,pn			%l6, 1f
		 add			%g6, TI_FPREGS+0x40, %o4

		membar			#Sync
		ldda			[%o3 + %o2] ASI_BLK_P, %f0
		ldda			[%o4 + %o2] ASI_BLK_P, %f16
		membar			#Sync
1:		andcc			%l2, FPRS_DU, %g0
		be,pn			%icc, 1f
		 wr			%g1, 0, %gsr
		add			%o2, 0x80, %o2
		membar			#Sync
		ldda			[%o3 + %o2] ASI_BLK_P, %f32
		ldda			[%o4 + %o2] ASI_BLK_P, %f48

1:		membar			#Sync
		ldx			[%o1 + %o5], %fsr
2:		stb			%l5, [%g6 + TI_FPDEPTH]
		ba,pt			%xcc, rt_continue
		 nop
5:		wr			%g0, FPRS_FEF, %fprs
		membar			#StoreLoad | #LoadLoad
		sll			%o0, 8, %o2

		add			%g6, TI_FPREGS+0x80, %o3
		add			%g6, TI_FPREGS+0xc0, %o4
		membar			#Sync
		ldda			[%o3 + %o2] ASI_BLK_P, %f32
		ldda			[%o4 + %o2] ASI_BLK_P, %f48
		membar			#Sync
Loading