[U-Boot-Users] [Fwd: Intel LXT971A PHY support]

listmember at orkun.us listmember at orkun.us
Tue Jan 13 21:02:02 CET 2004

I did not get any comment for this. I was wondering the status of this patch.

Best regards,

---------------------------- Original Message ----------------------------

I am in the process of creating a U-Boot port for Cogent CSB272 board

Working from U-Boot 1.0.0 tarball sources, I got CSB272 running. I still
have some work done for it so I am not submitting CSB272 board support
yet. Maybe next week or so after I complete work on it and make sure Linux
boots OK.

Anyway, CSB272 board has Intel LXT971A PHY. I could not get this PHY
working initially. After investigation I have found:

1) LXT971A requires some recovery time (~300usec) before any register
access after reset. This is documented in the datasheet on page 70, table

2) LXT971A requires some time after command is issued before polling
EMAC_STACR_OC is valid. I am not sure why this is needed but it is needed
for this particular PHY or otherwise it does not work. I have found this
to be minimum 32usec. I used 40usec for some safety margin.

Thus, to get it working I had to patch two shared files:


The code added are conditional for each change and without those macro
definitions it compiles exactly as it is right now. The macros are as
follows (from my include/configs/csb272.h):

#define CONFIG_PHY_CMD_DELAY    40      /* PHY COMMAND delay            */
                                        /* 32usec min. for LXT971A      */
#define CONFIG_PHY_RESET_DELAY  300     /* PHY RESET recovery delay     */

Here is the patch (I can resend it as an attachment if format is broken)

--- u-boot-1.0.0/cpu/ppc4xx/miiphy.c	2003-09-02 18:08:13.000000000 -0500
+++ u-boot/cpu/ppc4xx/miiphy.c	2004-01-11 02:56:16.000000000 -0600 @@
-110,7 +110,9 @@ int miiphy_read (unsigned char addr, uns
 #if 0	/* test-only */
 	printf ("a2: write: EMAC_STACR=0x%0x\n", sta_reg);	/* test-only */
+#if defined(CONFIG_PHY_CMD_DELAY)
+	udelay(CONFIG_PHY_CMD_DELAY);	/* Intel LXT971A needs this */
 	sta_reg = in32 (EMAC_STACR);
 	i = 0;
 	while ((sta_reg & EMAC_STACR_OC) == 0) {
@@ -166,6 +168,9 @@ int miiphy_write (unsigned char addr, un
 	memcpy (&sta_reg, &value, 2);	/* put in data */

 	out32 (EMAC_STACR, sta_reg);
+#if defined(CONFIG_PHY_CMD_DELAY)
+	udelay(CONFIG_PHY_CMD_DELAY);	/* Intel LXT971A needs this */

 	/* wait for completion */
 	i = 0;
--- u-boot-1.0.0/common/miiphyutil.c	2003-10-08 17:33:00.000000000 -0500
+++ u-boot/common/miiphyutil.c	2004-01-11 22:42:42.249886108 -0600 @@
-103,6 +103,9 @@ int miiphy_reset (unsigned char addr)
 		return (-1);

+	udelay(CONFIG_PHY_RESET_DELAY);	/* Intel LXT971A needs this */
 	 * Poll the control register for the reset bit to go to 0 (it is *
auto-clearing).  This should happen within 0.5 seconds per the

More information about the U-Boot mailing list