EZ-X5 보드에 CS8900 모듈을 하나 더 달아서 IP 공유기를 만들고 있습니다.
CPLD 소스를 수정했구요, nCS0 영역의 0x0C000000번지를 사용하고 있습니다.
디바이스 드라이버 소스에서 GPIO 번지는 13으로 잡고, 가상 메모리는 0xF1700000 으로 맵핑했습니다.
회로에서 IOR은 REV1에 연결하고, IOW는 REV0에 연결했습니다.
iptables도 정상적으로 보드에 올렸구여, 처음 부팅해서 추가한 CS8900모듈도 정상적으로 잡혔습니다.
그런데 실제 인터넷에 접속했을때, 몇번은 다른 사이트로의 이동이 잘 되었었는데요, 어느 시점부터는
다음과 같은 메시지가 뜨면서 동작이 안됩니다.

NETDEV WATCHDOG: eth1: transmit timed out

다음은 제가 수정한 소스의 일부분입니다.

1. linux/arch/arm/mach-pxa/ezboard

/*
* IO map for the devices.
*/
static struct map_desc ez_x5_io_desc[] __initdata = {
/* virtual physical length domain r w c b */
{ 0xf0000000, 0x00000000 +0x000000, 0x00400000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0 Boot Flash -- slow RD/WR

{ 0xf1000000, 0x00000000 +0x400000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0 CS8900 영역 -- slow RD/WR
// { 0xf1100000, 0x00000000 +0x800000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0 PS2/IDE -- slow RD/WR CPLD.REV0
{ 0xf1700000, 0x00000000 +0xC00000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0 External CS8900 영역 -- slow RD/WR
{ 0xf1200000, PXA_CS1_PHYS+0x000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS1 NAND-Flash -- fast RD/WR
{ 0xf1300000, PXA_CS1_PHYS+0x400000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS1 MK712 -- fast RD/WR

// PCB Ver1.1 이상
// { 0xf1400000, 0x00000000 +0xC00000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS0 PCMCIA Ctrl -- slow RD/WR CPLD.REV1
// { 0xf1500000, PXA_CS1_PHYS+0x800000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS1 REV -- fast RD/WR CPLD.REV2
// { 0xf1600000, PXA_CS1_PHYS+0xC00000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS1 REV -- fast RD/WR CPLD.REV2

{ 0xf2000000, PXA_CS2_PHYS , 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS2 USB-Host/...
{ 0xf3000000, PXA_CS3_PHYS , 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS3 영역 16MByte
{ 0xf4000000, PXA_CS4_PHYS , 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS4 영역 16Mbyte
{ 0xf5000000, PXA_CS5_PHYS , 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, // nCS5 영역 16Mbyte
LAST_DESC
};


2. linux/drivers/net/Config.in

if [ "$CONFIG_ARCH_PXA_EZ_X5" = "y" ]; then
dep_bool ' EZ-X5 CS8900A support' CONFIG_EZ_X5_CS8900A
fi
if [ "$CONFIG_ARCH_PXA_EZ_X5" = "y" ]; then
dep_bool ' EZ-X5 EXTERNAL CS8900A support' CONFIG_EZ_X5_CS8900A
fi

3. linux/drivers/net/Makefile

obj-$(CONFIG_EZ_X5_CS8900A) += ez89x0.o
obj-$(CONFIG_EZ_X5_CS8900A) += ez89x0e.o

4. linux/drivers/net/Space.c

extern int ez89x0_probe(struct net_device *dev);
extern int ez89x0e_probe(struct net_device *dev);
.
.
static struct devprobe arm_probes[] __initdata = {
#ifdef CONFIG_EZ_X5_CS8900A
{ez89x0_probe, 0}, /* EZ-X5 Board CS 8900 A Ethernet Chip */
#endif
{NULL, 0},
};

static struct devprobe eez_probes[] __initdata = {
#ifdef CONFIG_EZ_X5_CS8900A
{ez89x0e_probe, 0}, /* EZ-X5 Board External CS 8900A Ethernet Chip */
#endif
{NULL, 0},
};
.
.
static int __init ethif_probe(struct net_device *dev)
{
unsigned long base_addr = dev->base_addr;
.
.
.
if (probe_list(dev, arm_probes) == 0)
return 0;
if (probe_list(dev, eez_probes) == 0)
return 0;
.
.
}

5. Device Driver 작업

1) linux/drivers/net/ez89x0.c 파일을 linux/drivers/net/ez89x0e.c로 복사한다.
2) linux/drivers/net/ez89x0e.c
- 모든 ez89x0_probe를 ez89x0e_probe로 바꾸어준다.
- 사용하게될 가상 어드레스와 GPIO 번지를 맞추어준다.

static unsigned int netcard_portlist[] __initdata =
{ 0xf1700000+0x300, 0};

#define DEFAULT_IRQ IRQ_GPIO(13)
#define DEFAULT_IRQ_GPIO 13
.
.
static int io=0xf1700300;
static int irq=IRQ_GPIO13;
.
.


다음은 부팅시 뜬 메시지를 캡쳐 한것입니다.

Quickly Autoboot [ENTER] / Goto BOOT-MENU press [space bar].
Copy Kernel Image .....
Copy Ramdisk Image .....
Starting kernel [MARCH 303]...
Uncompressing Linux.................................................... done, b.
Linux version 2.4.19-rmk7-pxa1 (root@localhost.localdomain) (gcc version 3.2.1)T
CPU: XScale-PXA255 revision 6
Machine: WWW.FALINUX.COM EZ-X5 for PXA255 Board
Ignoring unrecognised tag 0x00000000
Memory clock: 99.53MHz (*27)
Run Mode clock: 398.13MHz (*4)
Turbo Mode clock: 398.13MHz (*1.0, inactive)
On node 0 totalpages: 16384
zone(0): 16384 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: keepinitrd initrd=0xa0800000,5M root=/dev/ram ramdisk=1228
Console: colour dummy device 80x30
Calibrating delay loop... 397.31 BogoMIPS
Memory: 64MB = 64MB total
Memory: 57916KB available (1376K code, 302K data, 72K init)
Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
Inode cache hash table entries: 4096 (order: 3, 32768 bytes)
Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Sangoma WANPIPE Router v1.1 (c) 1995-2000 Sangoma Technologies Inc.
Initializing RT netlink socket
Using PXA255 frequency points.
Registering CPU frequency change support.
CPU clock: 398.131 MHz (99.000-400.000 MHz)
Starting kswapd
Console: switching to colour frame buffer device 80x30
LCD resolution 640x480
pty: 256 Unix98 ptys configured
Serial driver version 5.05c (2001-07-08) with no serial options enabled
ttyS00 at 0x0000 (irq = 15) is a PXA UART
ttyS01 at 0x0000 (irq = 14) is a PXA UART
ttyS02 at 0x0000 (irq = 13) is a PXA UART
mk712 device OK!
eth0: cs8900 rev K Base 0xF1000300<6>, IRQ 44, MAC 00:A2:55:9B:26:31
eth1: cs8900 rev K Base 0xF1700300<6>, IRQ 36, MAC 00:01:02:03:04:05
RAMDISK driver initialized: 16 RAM disks of 12288K size 1024 blocksize
loop: loaded (max 8 devices)
NAND device: Manufacture ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MB 3,3V)
Creating 3 MTD partitions on "NAND 64MB 3,3V":
0x00000000-0x00100000 : "EZ-X5 Kernel partition"
0x00100000-0x00600000 : "EZ-X5 Ramdisk partition"
0x00600000-0x04000000 : "EZ-X5 Data partition 0"
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 4096 bind 8192)
Linux IP multicast router 0.06 plus PIM-SM
ip_conntrack (512 buckets, 4096 max)
ip_tables: (C) 2000-2002 Netfilter core team
arp_tables: (C) 2002 David S. Miller
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NetWinder Floating Point Emulator V0.95 (c) 1998-1999 Rebel.com
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem) readonly.
Freeing init memory: 72K
INIT: version 2.84 booting
INIT: Entering runlevel: 3
SIOCADDRT: Network is unreachable
Starting system logger: syslogd
Starting INET services: inetd


Welcome to J.D&T EZ-X5 ( www.falinux.com )
XScale(PXA255) Linux
ez-x5 login:

다음은 핑 테스트를 한 결과 이고, 인터넷 접속 중에 에러가 뜨면서 멈춘 모습을
캡쳐한 것입니다.


--- 192.168.1.2 ping statistics ---
71 packets transmitted, 69 packets received, 2% packet loss
round-trip min/avg/max = 0.7/1.4/44.2 ms
[root@ez-x5 /root]$ NETDEV WATCHDOG: eth1: transmit timed out
NETDEV WATCHDOG: eth1: transmit timed out
NETDEV WATCHDOG: eth1: transmit timed out
NETDEV WATCHDOG: eth1: transmit timed out
NETDEV WATCHDOG: eth1: transmit timed out


뭐가 문제인지 잘 모르겠군요... 하드웨어상의 충돌인것 같은데...-_-;;
이것땜에 며칠 삽질한걸 생각하면..;;;;
답변 부탁드립니다...(__)