PERFORCE change 144131 for review

Andrew Turner andrew at FreeBSD.org
Thu Jun 26 08:55:35 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=144131

Change 144131 by andrew at andrew_bender on 2008/06/26 08:55:28

	Add enough support for IRQ's to be able to call the uart interrupt handler

Affected files ...

.. //depot/projects/arm/src/sys/arm/s3c2xx0/neo1973_machdep.c#4 edit
.. //depot/projects/arm/src/sys/arm/s3c2xx0/s3c2410.c#12 edit
.. //depot/projects/arm/src/sys/arm/s3c2xx0/s3c2xx0var.h#5 edit

Differences ...

==== //depot/projects/arm/src/sys/arm/s3c2xx0/neo1973_machdep.c#4 (text+ko) ====

@@ -164,6 +164,8 @@
 #undef	_A
 #undef	_S
 
+#define	ioreg_write32(a,v)	(*(volatile uint32_t *)(a)=(v))
+
 #ifdef DDB
 extern vm_offset_t ksym_start, ksym_end;
 #endif
@@ -328,6 +330,7 @@
 	cpu_idcache_wbinv_all();
 
 	/* Disable all peripheral interrupts */
+	ioreg_write32(S3C2410_INTCTL_BASE + INTCTL_INTMSK, ~0);
 	s3c2410_uart_vaddr = S3C2410_UART0_BASE;
 	cninit();
 

==== //depot/projects/arm/src/sys/arm/s3c2xx0/s3c2410.c#12 (text+ko) ====

@@ -119,21 +119,15 @@
         struct resource *ires,  int flags, driver_filter_t *filt,
 	driver_intr_t *intr, void *arg, void **cookiep)
 {
-	int saved_cpsr;
 	int error;
 
-	if (flags & INTR_TYPE_CLK) {
-		if (rman_get_start(ires) == 0)
-			rman_set_start(ires, 26);
-		else
-			rman_set_start(ires, 27);
-	}
-	saved_cpsr = SetCPSR(I32_bit, I32_bit);                 
-	SetCPSR(I32_bit, saved_cpsr & I32_bit);
-
 	error = BUS_SETUP_INTR(device_get_parent(dev), child, ires, flags, filt,
 	    intr, arg, cookiep);
-	return (error);
+	if (error != 0)
+		return (error);
+
+	arm_unmask_irq(rman_get_start(ires));
+	return (0);
 }
 
 static struct resource *
@@ -262,12 +256,15 @@
 	s3c2xx0_softc->s3c2xx0_irq_rman.rm_type = RMAN_ARRAY;
 	s3c2xx0_softc->s3c2xx0_irq_rman.rm_descr = "S3C2410 IRQs";
 	if (rman_init(&s3c2xx0_softc->s3c2xx0_irq_rman) != 0 ||
-	    rman_manage_region(&s3c2xx0_softc->s3c2xx0_irq_rman, 0, 32) != 0)
+	    rman_manage_region(&s3c2xx0_softc->s3c2xx0_irq_rman, 0,
+	    S3C2410_SUBIRQ_MAX - 1) != 0)
 		panic("s3c2410_attach: failed to set up IRQ rman");
-	device_add_child(dev, "timer", 0);
-	device_add_child(dev, "nand", 0);
+	s3c2410_add_child(dev, 0, "nand", 0);
+	s3c2410_add_child(dev, 0, "timer", 0);
 
+	/* Add the uart and set it's irq */
 	child = s3c2410_add_child(dev, 0, "uart", 0);
+	bus_set_resource(child, SYS_RES_IRQ, 0, S3C2410_INT_TXD0, 1);
 
 	bus_generic_probe(dev);
 	bus_generic_attach(dev);
@@ -357,7 +354,7 @@
 			if (irq == 0)
 				return (-1);
 
-			irq = ffs(irq) - 1;
+			irq = ffs(irq);
 
 			/* Clear the sub irq pending bit */
 			bus_space_write_4(&s3c2xx0_bs_tag,

==== //depot/projects/arm/src/sys/arm/s3c2xx0/s3c2xx0var.h#5 (text+ko) ====

@@ -59,6 +59,10 @@
 	struct rman s3c2xx0_irq_rman;
 };
 
+struct s3c2xx0_ivar {
+	struct resource_list resources;
+};
+
 typedef void *s3c2xx0_chipset_tag_t;
 
 extern struct bus_space s3c2xx0_bs_tag;


More information about the p4-projects mailing list