Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Jun 2006 21:30:32 GMT
From:      Warner Losh <imp@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 99700 for review
Message-ID:  <200606202130.k5KLUWQh075178@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=99700

Change 99700 by imp@imp_lighthouse on 2006/06/20 21:29:46

	p4 edit is your friend...  Trust your friend...
	
	Re-implement the workaround for the MII problem that we seem to
	be having...  Wait up to 10seconds for link, and reset the MII
	if we don't get link in that time and try again...

Affected files ...

.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/emac.c#19 edit

Differences ...

==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/emac.c#19 (text+ko) ====

@@ -391,20 +391,6 @@
 	unsigned sec;
 	int i;
 #endif
-#if 0
-
-//	AT91F_MII_WritePhy(pEmac, 20, 0x70);
-	AT91F_MII_WritePhy(pEmac, 0x0, 0x3300);
-	while (AT91F_MII_ReadPhy(pEmac, 0x0) & (1 << 9));
-	sec = GetSeconds();
-	while (1) {
-	for (i = 0; i <= 0x18; i++) 
-	    printf("%x ", AT91F_MII_ReadPhy(pEmac, i));
-	printf("\r\n");
-	while (GetSeconds() <= sec + 2) continue;
-	sec = GetSeconds();	
-	}
-#endif
 #ifdef BOOT_KB9202
 	stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS2_REG);
 	if (!(stat2 & MII_STS2_LINK))
@@ -416,21 +402,20 @@
 		update |= AT91C_EMAC_FD;
 #endif
 #ifdef BOOT_TSC
-again:;
-	stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS_REG);
-	stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS_REG);
-	if (!(stat2 & MII_STS_LINK_STAT)) {
-		sec = GetSeconds();
-		printf("emac: missing link status 0x%x\r\n", stat2);
-		for (i = 0; i <= 0x18; i++) 
-			printf("%x ", AT91F_MII_ReadPhy(pEmac, i));
-		printf("\r\n");
-		while (GetSeconds() <= sec + 2) continue;
-		sec = GetSeconds();	
-		AT91F_MII_WritePhy(pEmac, 0x0, 0x3300);
-		while (AT91F_MII_ReadPhy(pEmac, 0x0) & (1 << 9));
-		goto again;
-		return;
+	while (1) {
+		for (i = 0; i < 10; i++) {
+			stat2 = AT91F_MII_ReadPhy(pEmac, MII_STS_REG);
+			if (stat2 & MII_STS_LINK_STAT)
+				break;
+			printf(".");
+			sec = GetSeconds();
+			while (GetSeconds() <= sec) continue;
+		}
+		if (stat2 & MII_STS_LINK_STAT)
+			break;
+		printf("Resetting MII...");
+		AT91F_MII_WritePhy(pEmac, 0x0, 0x8000);
+		while (AT91F_MII_ReadPhy(pEmac, 0x0) & 0x8000) continue;
 	}
 	printf("emac: link");
 	stat2 = AT91F_MII_ReadPhy(pEmac, MII_SPEC_STS_REG);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200606202130.k5KLUWQh075178>