0

0x10020000 にあるレジスター CS4 との通信に問題があります。U-boot では、reg の値は 0x45fab3c1 ですが、アクセスしようとすると 0x10101010 が返され、書き込みもできません。

CS3 ではすべて問題ないようで、読み書きができます。CS3 は 0x10000000 にあります。

cs3 と cs4 の主な/唯一の違いは次のとおりです。

チップセレクト: Lp_cs3 バスサイズ: 32 ビット バス制御: 2 ウェイト状態 R/W ACK 無効 割り当てサイズ 32Kbyte

チップセレクト: Lp_cs4 バスサイズ: 8 ビット バス制御: 2 ウェイト状態 R/W ACK 無効 割り当てサイズ: 4 KByte

ユーザー空間では、次を使用します。

/*————————————————————————————————*/
//code from memedit.c
int fd;
fd = open("/dev/mem", O_SYNC | O_RDWR);
mem = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset & (~4095));
printf("/dev/mem[0x%08x] = 0x%08x", offset, *(unsigned int*)&mem[offset & 4095]);

//to write
*((unsigned int *)&mem[offset & 4095]) = input;
/*————————————————————————————————*/

私たちのカーネルモジュールでは:

/*————————————————————————————————*/
#define CS4_START    0x10020000U
#define CS4_STOP     0x10040000U
#define CS4_SIZE     0x00020000U
#define CS3_START    0x10000000U
#define CS3_STOP     0x10020000U
#define CS3_SIZE     0x00020000U

void __iomem *cs3_ioaddr   = ioremap ((volatile unsigned long)(CS3_START), CS3_SIZE);
printk("We read value at CS3: %x \n\n\n",in_be32(cs3_ioaddr+0x0018));
out_be32(cs3_ioaddr+0x0018,0x00000001);
printk("We read written value: %x \n\n\n",in_be32(cs3_ioaddr+0x0018));
/*————————————————————————————————*/

チップセレクトは正しく初期化されています...

プラットフォームは mpc5200b CPU に基づいており、fpga は Xilinx Virtex4 です。使用するカーネル: 2.6.33

詳しくは:

inn/outb、in_8/out_8 を試しましたが、カーネル内でこのコードを読み書きしようとすると:

/*----------------*/
static struct device_node *memoria_cs4;
static void __iomem *reg_cs4;
memoria_cs4 = of_find_node_by_path("/localbus/fpga@0,0/cs@0");
reg_cs4 = of_iomap(memoria_cs4, 0);

printk("Value before, at reg_cs4+0x001: %x \n",in_8(reg_cs4+0x323));
out_8(reg_cs4+0x001,0xFA);
printk("Value after, at reg_cs4+0x001: %x \n",in_8(reg_cs4+0x323));
/*----------------*/

私は同じ値の前後に取得します: 0x10. しかし、uboot で表示される値は 0xFB です。inb/outbも試しました...そのコードはcs3で動作しますが、in_be32/out_be 32で動作します...当然、デバイスツリーのメモリ位置をcs4からcs3に変更しました...しかし、試しましたそれは ioremap() でも同じです: cs3 は動作しますが、cs4 は動作しません...

よろしくお願いします…</p>

ネロフ

4

1 に答える 1