[Suzaku:02125] SZ410=?ISO-2022-JP?B?GyRCJEsbKEI=?=UART =?ISO-2022-JP?B?GyRCJHJESTJDJDkka0p9SyEbKEI=?=?

KAWASAKI Yoshiaki email@hidden
2011年 11月 21日 (月) 16:45:57 JST


川崎@NCS と申します。
いつもお世話になっております。

SUZAKU-V SZ410-SIL をベースに UART を 2ポート追加した装置を開発し
ています。経験のある方、または手順をご存知の方、ご教示願えませんで
しょうか。
以下に、現状概略と自分なりの分析経過を記します。妥当なものか、より
良い解法があるか、適切な参考文献がないか、などアドバイスを是非とも
お願いします。
現在、装置が手元にない状態でして、「こうするとどうなる ?」という
ご助言には直ぐにはお答えできないかも知れませんが、当方が使える時期
が不定期にもらえますので、その際に試すことは可能です。

----

make menuconfig の「Character devices」では「SUZAKU I/O LED/SW Board」
は外してあります。( 実際、同ボードは使っていません )

この場合、xparameters.h は xparameters_sz410.h をインクルードする
ようですので、FPGA設計担当者から受け取った xparameters.h は
xparameters_sz410.h とファイル名を変更して
~/dist/atmark-dist-20090318/linux-2.6.x/arch/ppc/platforms/4xx/xparameters/
に置いています。
ただ、「置いてインクルードされるようにした」だけでは肝腎のドライバー
に必要な情報が自動的に渡るわけではないと思います。
デバイスファイルも作成されませんが、これはメジャー番号さえ合理的に
決定できればデバイスファイルリストに加えればよいだけだと判断して
います。具体的には、

(ア) 下記ファイルの DEVICES に ttyS1 と ttyS2 を加える
~/dist/atmark-dist-20090318/vendors/AtmarkTechno/SUZAKU-V.SZ410-SIL/Makefile


結果、問題の根本は、

(a) 該当するドライバーはどれか
(b) FPGA のアドレス情報などをそのドライバーに渡す橋渡しの仕組み

ということになるかと思います。

色々ソースを探索してみると、
~/dist/atmark-dist-20090318/linux-2.6.x/drivers/serial/uartlite_xilinx.c
~/dist/atmark-dist-20090318/linux-2.6.x/arch/ppc/platforms/4xx/virtex.c
が鍵になりそうに思えます。

まず、上記問題の (a) は uartlite_xilinx だと判断しています。

次に、上記問題の (b) については、上記のソースファイル各々にいかにも
それらしいテーブルがあります。

(T.1) static struct uart_port xul_port[] ( uartlite_xilinx.c )
(T.2) struct uart_port uartlite_platform_data[] ( virtex.c )
# ソースの該当部分は末尾に引用

後者(T.2) の場合、empty record の前に UARTLITE_UART(1),UARTLITE_UART(2)
を入れて、UARTLITE_UART() が期待しているベースアドレス等の名前付け
規則に合わせてマクロ定義をし直してやればよいように見えます。ただ、
他のソースでどのように参照されているか検索したところ、このテーブル
名( uartlite_platform_data ) では参照されず、ppc_sys_platform_devices
のメンバー( .dev.platform_data ) として参照されるようです。同じ名前の
構造体メンバーが多すぎて追跡しきれませんでした。

前者(T.1) の場合はもっと単純で、399-406行目と同様の記述を追加すれば
よいように思えます。(T.2) と異なり、他のテーブルを通じて間接参照さ
れそうなコードは見当たりません。uartlite_xilinx.c に閉じたものと考
えて良さそうです。

というわけで、(T.1) へのエントリー追加とデバイスファイルリストへの
ttyS1 と ttyS2 の追加(ア)、という方針を考えておりますが、(T.2) も
気になります。

是非ともご助言下さいませ。

----------------------------------------------------
日本コントロールシステム株式会社 (NCS) 新横浜事業所
川崎義晃 <email@hidden>
〒 222-0033 神奈川県横浜市港北区新横浜2-7-9
Tel:  045-477-5800 ; Fax: 045-477-5811
URL: http://www.nippon-control-system.co.jp/
----------------------------------------------------

(T.1) static struct uart_port xul_port[] ( uartlite_xilinx.c )
   384  static struct uart_port xul_port[] = {
   385  #if defined(XPAR_CONSOLE_UART_BASEADDR) && \
   386      defined(XPAR_SYSTEM_INTC_CONSOLE_UART_INTERRUPT_INTR)
   387    {
   388      .mapbase    = XPAR_CONSOLE_UART_BASEADDR,
   389      .irq        = XPAR_SYSTEM_INTC_CONSOLE_UART_INTERRUPT_INTR,
   390      .iotype     = UPIO_MEM32,
   391      .flags      = UPF_BOOT_AUTOCONF,
   392      .type       = PORT_UARTLITE,
   393      .ops        = &xul_ops,
   394    },
   395  #endif
   396  #ifdef CONFIG_SUZAKU_SIL_RS232C
   397  #if defined(XPAR_OPB_UARTLITE_0_BASEADDR) && \
   398      defined(XPAR_SYSTEM_INTC_OPB_UARTLITE_0_INTERRUPT_INTR)
   399    {
   400      .mapbase    = XPAR_OPB_UARTLITE_0_BASEADDR,
   401      .irq        = XPAR_SYSTEM_INTC_OPB_UARTLITE_0_INTERRUPT_INTR,
   402      .iotype     = UPIO_MEM32,
   403      .flags      = UPF_BOOT_AUTOCONF,
   404      .type       = PORT_UARTLITE,
   405      .ops        = &xul_ops,
   406    },
   407  #endif
   408  #endif
   409  };

(T.2) struct uart_port uartlite_platform_data[] ( virtex.c )
    53  #if defined(CONFIG_SERIAL_UARTLITE) || defined(CONFIG_SERIAL_UARTLITE_MODULE)
    54  #define UARTLITE_UART(num) { \
    55          .mapbase  = XPAR_OPB_UARTLITE_##num##_BASEADDR,         \
    56          .irq      = XPAR_OPB_INTC_0_OPB_UARTLITE_##num##_INTERRUPT_INTR, \
    57          .iotype   = UPIO_MEM,                   \
    58          .flags    = UPF_BOOT_AUTOCONF,              \
    59          .regshift = 2,                      \
    60      }
    61  struct uart_port uartlite_platform_data[] = {
    62  #ifdef XPAR_OPB_UARTLITE_0_BASEADDR
    63      UARTLITE_UART(0),
    64  #endif
    65      { }, /* terminated by empty record */
    66  };
    67  #endif



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