[Suzaku:00105] uart ハードBASEアドレスの定義について
kyosuke yoshizu
email@hidden
2004年 10月 8日 (金) 10:36:06 JST
yoshizuです
yashi殿
 ̄ ̄ ̄ ̄
回答ありがとうございます
ところで下記ソースで定義 XPAR_CONSOLE_UART_BASEADDR
がXPSで定義したハードアドレス0xFFFF2000に #defineされている部分
をKernelソースでgrepして探したのですが みつかりませんでした
どこにdefineしているのか教えていただけますか?
>At Tue, 05 Oct 2004 14:09:22 +0900,
>kyosuke yoshizu wrote:
>[...]
>> suzaku hardare manualの 9.UARTの追加を行い、linuxのdevice fileとし
>> てttyS1,c,4,65の定義の追加をして、このUARTをttyS1のデバイスファイル
>> としてアクセスしたいのですが、このttyS1の定義と追加UARTハードbaseア
>> ドレスFFFF8000との関係はどのようにして結び付ければよいのでしょうか?
>>
>> それとも結ぶ必要はない?
>
>あります、こんな↓感じです。
>
>uClinux-dist/linux-2.4.x/arch/microblaze/kernel/xmbserial.cに対するパッ
>チです。
>
>現在のドライバーはイマイチなので、置き換える予定です。予定ですので、い
>つになるかは未定ですが…。
>
>わからない部分があったら、聞いてください。
>--
> yashi
>
>--- xmbserial.c.orig 2004-10-06 10:11:36.000000000 +0900
>+++ xmbserial.c 2004-10-06 10:16:59.000000000 +0900
>@@ -181,9 +181,8 @@
> */
> static struct xmb_serial xmbrs_table[] = {
> { 0, (XPAR_CONSOLE_UART_BASEADDR), IRQBASE, ASYNC_BOOT_AUTOCONF },
/* ttyS0 */
>-#ifdef CONFIG_MICROBLAZE_DEBUG_UART
>- { 0, (XPAR_DEBUG_UART_BASEADDR), IRQBASE+1, ASYNC_BOOT_AUTOCONF } /*
ttyS1 */
>-#endif
>+ { 0, (XPAR_SECOND_UART1_BASEADDR), IRQBASE+2, ASYNC_BOOT_AUTOCONF },
/* ttyS1 */
>+ { 0, (XPAR_SECOND_UART2_BASEADDR), IRQBASE+3, ASYNC_BOOT_AUTOCONF }
/* ttyS2 */
> };
>
> #define NR_PORTS (sizeof(xmbrs_table) / sizeof(struct xmb_serial))
>@@ -389,13 +388,22 @@
> */
> void xmbrs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
> {
>- struct xmb_serial *info;
>+ struct xmb_serial *info = NULL;
> unsigned int isr;
> volatile unsigned int *uartp;
>+ int i;
>
>- info = &xmbrs_table[(irq - IRQBASE)];
>- uartp = (volatile unsigned int *) info->addr;
>+ for(i = 0 ; i < NR_PORTS ; i++){
>+ if(xmbrs_table[i].irq == irq){
>+ info = &xmbrs_table[i];
>+ }
>+ }
>+ if(!info){
>+ printk("invalied irq happen, no : %d\n", irq);
>+ return;
>+ }
>
>+ uartp = (volatile unsigned int *) info->addr;
> isr = uartp[XUL_STATUS_REG_OFFSET/4];
>
> /* Grab any valid chars */
>@@ -1464,6 +1472,7 @@
> switch (info->line) {
> case 0:
> case 1:
>+ case 2:
> break;
> default:
> printk("SERIAL: don't know how to handle UART %d interrupt?\n",
>
suzaku メーリングリストの案内