Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Aug 2014 10:24:43 -0700
From:      Nathan Whitehorn <nwhitehorn@freebsd.org>
To:        Andrew Turner <andrew@freebsd.org>, src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   Re: svn commit: r269818 - projects/arm64/sys/dev/fdt
Message-ID:  <53E8FC5B.9070605@freebsd.org>
In-Reply-To: <53e8f606.23db.c1d4a@svn.freebsd.org>
References:  <53e8f606.23db.c1d4a@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

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



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