I am having trouble getting a FIQ enabled wtih linux 3.18
We have an application that takes data from a FPGA over the EIM bus at 50kHz.
Porting to 3.18, the old code causes a panic.
I switch ed to use enable_fiq(), and it almost works. It just seems to fall back to the GIC. (I see about 50k interrupts per second in a spurious Irq handler that is set up with request_irq(), but not enabled)
More seriously, I cannot figure out how to put those irq's on cpu 3.
As a result of cpu0 resource contention with network irqs, my userspace application doesn't get all the data...
int evi_init_fiq(struct evifpga_device *dev)
{
int ret;
disable_fiq(dev->irq);
ret = claim_fiq(&fiq_handle);
if (ret) {
printk(KERN_ALERT "EVi - Unable to claim FIQ\n");
return ret;
}
set_fiq_handler(&evi_fiq_handler, SZ_256);
enable_fiq(dev->irq);
if (ret) {
printk(KERN_ALERT "EVi - Unable to enable FIQ on CPU %d\n", FIQ_CPU_TARGET);
release_fiq(&fiq_handle);
return ret;
}
return 0;
}
On 3.0.35 We used a FIQ interrupt on cpu core 3, and then added an isolcpu=3 to the kernel command line to get reliable 50k data.
fiq was enabled by the following:
void fiq_enable(void * data)
{
unsigned long val;
val = readl(GIC_CPU_CTRL);
val |= GIC_CPU_CTRL_BITS_FIQEN;
writel(val, GIC_CPU_CTRL);
}
I noticed that several of the needed address macros were not exported, and attempts to define them but leave the code otherwise untouched resulted in a kernel panic.
GIC_CPU_CTRL is defined as 0x0 (address ZERO!!!111!!) in 3.0.35, so I'm not sure how this ever worked, but it did.
Message was edited by: Joshua Clayton Remove the reference to initiating the FIQ on a specific cpu core. I don't need this anymore
Maybe you could try asking this one at linux-arm-kernel mailing list.
After some trepidation, I went ahead and posted to the arm kernel mailing list.
I never did get a response on the arm kernel mailing list. The best I have found so far are patches posted by Daniel Thompson, which purport to enable some NMI like interrupts to use the FIQ mechanism.
I'm now taking a second look after doing other things for a while. So far I have not had success.