Hallo.
Kann mal einer die beiden Patches ausprobieren?
Ich hab einfach mal versucht den LBK-Eingang des Fujitsu-Chips auf '1' zu setzen.
Irgendwie hab ich das Gefühl, dass der LBK-Eingang des Chips auf 1 stehen muss, damit
Kollisionen wirklich ueberschrieben werden. Ich hab naemlich das Phänomen, dass meine
eth0 auf der dbox anzeigt, es gäbe frame_errors, die lt. Code nur dadurch entstehen koennen,
dass 'Late Collisions' auftreten. Collision Detection ist aber deaktiviert - sollte man meinen.
Wireshark zeigt auch 'ne Menge Retransmissions an, die von gedroppten Paketen herrühren.
Ein Versuch ist es zumindest Wert. Ich hab nur Grad keine Zeit und keinen Nerv ein
Image zu bauen. Die Patches beinhalten den FullDuplex patch aus dem tuxbox-wiki.
Hier die Patches:
Code: Alles auswählen
--- linux-2.4.36.orig/arch/ppc/8xx_io/enet.c 2008-04-02 21:14:15.236024151 +0200
+++ linux-2.4.36/arch/ppc/8xx_io/enet.c 2008-04-02 21:17:33.029940066 +0200
@@ -73,6 +73,8 @@
* All functions are directly controlled using I/O pins. See <asm/commproc.h>.
*/
+static int duplex_mode=0;
+
/* The transmitter timeout
*/
#define TX_TIMEOUT (2*HZ)
@@ -799,6 +801,13 @@
#error Exactly ONE pair of PA_ENET_[RT]XD, PB_ENET_[RT]XD must be defined
#endif
+ if (duplex_mode == 1)
+ {
+ immap->im_ioport.iop_papar &= (~PA_ENET_LBK);
+ immap->im_ioport.iop_padir |= (PA_ENET_LBK);
+ immap->im_ioport.iop_padat |= (PA_ENET_LBK);
+ }
+
#if defined(PC_ENET_LBK)
/* Configure port C pins to disable External Loopback
*/
@@ -984,7 +993,13 @@
/* Set processing mode. Use Ethernet CRC, catch broadcast, and
* start frame search 22 bit times after RENA.
*/
- sccp->scc_pmsr = (SCC_PMSR_ENCRC | SCC_PMSR_NIB22);
+ if (duplex_mode==0) {
+ sccp->scc_pmsr = (SCC_PMSR_ENCRC | SCC_PMSR_NIB22);
+ printk(KERN_INFO "half-duplex mode enabled");
+ } else {
+ sccp->scc_pmsr = (SCC_PMSR_ENCRC | SCC_PMSR_NIB22 | SCC_PMSR_LPB | SCC_PMSR_FDE);
+ printk(KERN_INFO "full-duplex mode enabled");
+ }
/* It is now OK to enable the Ethernet transmitter.
* Unfortunately, there are board implementation differences here.
@@ -1055,3 +1070,14 @@
return 0;
}
+
+#ifndef MODULE
+static int __init duplex_mode_setup(char *str)
+{
+ duplex_mode = simple_strtol(str, NULL, 0);
+ return 1;
+}
+
+__setup("dbox_duplex=", duplex_mode_setup);
+#endif
+
Code: Alles auswählen
--- linux-2.4.36.orig/include/asm-ppc/commproc.h 2008-02-24 21:38:03.000000000 +0100
+++ linux-2.4.36/include/asm-ppc/commproc.h 2008-04-02 21:16:58.622079782 +0200
@@ -473,6 +473,7 @@
#define PA_ENET_RXD ((ushort)0x0004)
#define PA_ENET_TXD ((ushort)0x0008)
#define PA_ENET_RCLK ((ushort)0x0200)
+#define PA_ENET_LBK ((ushort)0x0400)
#define PA_ENET_TCLK ((ushort)0x0800)
#define PC_ENET_TENA ((ushort)0x0002)