Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Aug 2014 18:43:56 +0100
From:      Andrew Turner <andrew@fubar.geek.nz>
To:        Nathan Whitehorn <nwhitehorn@freebsd.org>
Cc:        svn-src-projects@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r269818 - projects/arm64/sys/dev/fdt
Message-ID:  <20140811184356.52954d03@bender.lan>
In-Reply-To: <53E8FC5B.9070605@freebsd.org>
References:  <53e8f606.23db.c1d4a@svn.freebsd.org> <53E8FC5B.9070605@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 11 Aug 2014 10:24:43 -0700
Nathan Whitehorn <nwhitehorn@freebsd.org> wrote:

> 
> On 08/11/14 09:57, Andrew Turner wrote:
> > Author: andrew
> > Date: Mon Aug 11 16:57:42 2014
> > New Revision: 269818
> > URL: http://svnweb.freebsd.org/changeset/base/269818
> >
> > Log:
> >    Hack to get the correct value for the interrupt from the vendor
> > supplied device tree. The GIC used the format <type irq flags>
> > where the type is 0 for Shared Peripheral Interrupts (SPI), and 1
> > for Private Peripheral Interrupts. The SPIs start at 32 in the GIc
> > so we need to adjust their values to match this.
> >
> > Modified:
> >    projects/arm64/sys/dev/fdt/simplebus.c
> >
> > Modified: projects/arm64/sys/dev/fdt/simplebus.c
> > ==============================================================================
> > --- projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11
> > 16:44:06 2014	(r269817) +++
> > projects/arm64/sys/dev/fdt/simplebus.c	Mon Aug 11 16:57:42
> > 2014	(r269818) @@ -310,10 +310,18 @@
> > simplebus_setup_dinfo(device_t dev, phan icells = 1; }
> >   		for (i = 0, k = 0; i < nintr; i += icells, k++) {
> > +			u_int irq;
> > +
> > +			if (icells == 3) {
> > +				irq = intr[i + 1];
> > +				if (intr[i] == 0)
> > +					irq += 32;
> > +			} else
> > +				irq = intr[i];
> >   			intr[i] = ofw_bus_map_intr(dev, iparent,
> > icells, &intr[i]);
> > -			resource_list_add(&ndi->rl, SYS_RES_IRQ,
> > k, intr[i],
> > -			    intr[i], 1);
> > +			resource_list_add(&ndi->rl, SYS_RES_IRQ,
> > k, irq,
> > +			    irq, 1);
> >   		}
> >   		free(intr, M_OFWPROP);
> >   	}
> >
> 
> The much better place to do this kind of hack is in the ARM 
> nexus_ofw_map_intr() routine. Ian's intrng branch will push this into 
> the PIC driver, where it actually belongs, but putting it in nexus
> isn't so bad for now and will apply to all buses, not just simplebus.
> -Nathan

I know, this is a hack to get interrupts working. It will be fixed
before merging into head.

Andrew 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140811184356.52954d03>