[Suzaku:01858] Re: Linuxの割り込みでハンドラがリソースを占有

Nobuaki Sugishima email@hidden
2010年 7月 26日 (月) 10:29:56 JST


溝渕様

 報告が遅れ申し訳ありません。
 対象となるFPGAプログラムにバグがあり、確認作業が遅れていました。

 ご指摘の内容をドライバ内の割り込みハンドラで実行したところ、正常に割り込みがかかるようになりました。:


static irqreturn_t
my_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
⇒     IntrStatus = __raw_readl(my_addr_isr);

     dataSet();

⇒     __raw_writel(IntrStatus, my_addr_isr);

 return IRQ_HANDLED;
}

⇒のステップを追加しました。


my_addr_isrは

static int __init my_init_module(void)
{
    ・・・・・・
     // IntrStatus 格納アドレスを取得:0xF0FFD000 + 0x00000100 + 0x00000020
= 0xF0FFD00120
     #define XPS_MY_INTR_CNTRL_SPACE_OFFSET (0x00000100)
     #define XPS_MY_INTR_IPISR_OFFSET (XPS_MY_INTR_CNTRL_SPACE_OFFSET +
0x00000020)
     my_addr_isr_offset = XPAR_MY_CNTLR_BASEADDR + XPS_MY_INTR_IPISR_OFFSET;
     my_addr_isr = (u32 *)ioremap_nocache(my_addr_isr_offset,
sizeof(unsigned long));

    ・・・・・・
 return ret;
}

であらかじめ確保してあります。

 私の場合、interrupt_init(); をBoot段階で実行しているため、肝心の2ステップが抜けてしまいました。お騒がせしました。




 本来別スレッドにすべきとは思いますが、関連事項を伺ってしまいます。

 ドライバに大きなメモリエリアを割り当てたいと考え、BRAMおよびBRAM_VECの使用を思い立ちました。
ドライバ内からのアクセスが容易、高速が期待できるからです。

Linux起動後はベクトルテーブルも含めすべてのワークエリアはSDRAMに移行、この領域はまったくFreeであると考えたのですが、この認識は間違いでしょうか?。







 
----- Original Message ----- 
From: "mizo" <email@hidden>
To: "SUZAKU general discussion list" <email@hidden>
Sent: Wednesday, July 07, 2010 10:25 AM
Subject: [Suzaku:01833] Re: Linuxの割り込みでハンドラがリソースを占有


> 溝渕です。
>
> Nobuaki Sugishima wrote:
>> Linuxで割り込みに関するデバイスドライバが不調です。
>>
>> まずEDKの段階では割り込みは正常に動作しています。割り込み源は繰り返し
>> 10Hzのタイマーです。
>
> 追加した割り込みは、SILのタイマ割り込みを参考に追加したものですか?独自
> に追加したものですか?
>
> SILを参考にした場合は、ISR(Interrupt Status Register)に割り込み要因を書
> き込み、割り込みを止める処理を行なわなければなりません。
>
> これは、bbootのソースから確認することができます。
>
> int timer_interrupt_handler(void * baseaddr_p)
> {
> Xuint32 IntrStatus;
>
> IntrStatus = OPB_SIL00_mReadReg(XPAR_OPB_SIL00_0_BASEADDR,
> OPB_SIL00_INTR_ISR_OFFSET);
> slot();
> OPB_SIL00_mWriteReg(XPAR_OPB_SIL00_0_BASEADDR, OPB_SIL00_INTR_ISR_OFFSET,
>     IntrStatus);
>
> return 0;
> }
>
> 上記コードでは、
>
> 1. OPB_SIL00_mReadReg()で割り込み要因を読み込む
> 2. OPB_SIL00_mWriteReg()で割り込み要因をISRに書き込む
>
> という処理を行なっています。この処理を行なわなければ、割り込みが入りっぱ
> なしになります。
>
> 以上ご確認ください。
>
> _______________________________________________
> suzaku mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/suzaku
>




suzaku メーリングリストの案内