Skip site navigation (1)Skip section navigation (2)
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>