Hello Jan,
Thank you for your answer. I checked /proc/interrupts and lspci -v, and I saw
that the IRQ is shared.
"If yes, resolve that conflict."
=> What must I do ? I'm not sure to have understood ?
/*****************************************************************************/
/*!
* \brief cifx_handler
*
* \param [in] irq Resource task pointer
*
* \return RTDM_IRQ_NONE or RTDM_IRQ_HANDLED
*
* \note cifx interrupt handler
*/
/*****************************************************************************/
static /*inline*/ int cifx_handler(rtdm_irq_t *irq)
{
struct rtdm_device *info = (struct rtdm_device
*)rtdm_irq_get_arg(irq, void);
io_info_t *device_data = (io_info_t *)
info->device_data;
if ((device_data->priv != NULL) || (device_data->irq_registered ==
FALSE) || (device_data->irq_enable == FALSE))
{
/* This is a PLX device and cannot produce an IRQ */
return RTDM_IRQ_NONE;
}
else
{
void __iomem *int_enable_reg =
device_data->mem[DPM_INDEX].internal_addr + DPM_HOST_INT_EN0;
void __iomem *int_status_reg =
device_data->mem[DPM_INDEX].internal_addr + DPM_HOST_INT_STAT0;
/* Is one of our interrupts enabled and active ? */
if (!(ioread32(int_enable_reg) & ioread32(int_status_reg) &
DPM_HOST_INT_MASK))
return RTDM_IRQ_NONE;
/* Disable interrupt */
iowrite32(ioread32(int_enable_reg) & ~DPM_HOST_INT_GLOBAL_EN,
int_enable_reg);
return RTDM_IRQ_HANDLED;
}
}
If IRQ is not mine, I return RTDM_IRQ_NONE, it's not correct ?
Thank you very much for your help,
Hilscher France
12, rue du 35ème Régiment d'Aviation
Miniparc du Chêne
69500 BRON
France
Tél. : +33 (0) 4 72 37 98 40
Fax : +33 (0) 4 78 26 83 27
http://www.hilscher.fr
HILSCHER FRANCE Jérôme Poncin
[email protected]
Ingénieur Développement Logiciel
Tél. : +33 (0) 4 72 37 98 44
Le 26/02/2013 12:37, Jan Kiszka a écrit :
On 2013-02-26 10:29, Jerome Poncin wrote:
Hello,
I have a problem with driver for Hilscher cifx with IRQ.
All driver run good (I verified in polling mode) but in case I activate
IRQ the system freeze.
I checked parameters of "rtdm_irq_request" function without success (all
seems good) ! I tried to see on internet to get some information about
the use of "rtdm_irq_request", or compare my code with other driver but
it's not easy...
I give you in attached file my code because I have no idea about my
problem, and it's really difficult to have some information or trace
after system freeze...
Do you have an idea about my problem ?
static inline int cifx_handler(rtdm_irq_t *irq)
^^^^^^
But I suspect the compiler is smart enough to ignore this.
Is the line you are registering for shared with other devices? Check
/proc/interrupts and lspci -v. If yes, resolve that conflict.
If not, add printk to your IRQ handler, redirect the kernel messages to
a serial console and try to find out how far and how ofter you get into
the handler.
Well, and then there is the option of source-level debugging. kgdb for
I-pipe patches aren't merged yet, but more convenient is KVM-based
debugging anyway. See [1] for the concept. Just requires VT-d or AMD
IOMMU on your target.
Jan
PS: Still no kernel coding style. Specifically the long lines makes it
hard to read.
[1]
http://chemnitzer.linux-tage.de/2012/vortraege/folien/1061-VirtualDebugging.pdf
_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai