Date: Mon, 11 Aug 2014 10:46:16 -0700 From: Nathan Whitehorn <nwhitehorn@freebsd.org> To: Andrew Turner <andrew@fubar.geek.nz> Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r269818 - projects/arm64/sys/dev/fdt Message-ID: <53E90168.1030403@freebsd.org> In-Reply-To: <20140811184356.52954d03@bender.lan> References: <53e8f606.23db.c1d4a@svn.freebsd.org> <53E8FC5B.9070605@freebsd.org> <20140811184356.52954d03@bender.lan>
next in thread | previous in thread | raw e-mail | index | archive | help
On 08/11/14 10:43, Andrew Turner wrote: > 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 > That's clear :) I just was trying to point there's an easier place to do the hack. -Nathan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53E90168.1030403>