[U-Boot] several problems with ethernet on MCF5445x

w.wegner at astro-kom.de w.wegner at astro-kom.de
Fri Mar 26 15:55:14 CET 2010


Hi,

On 26 Mar 2010 at 14:13, w.wegner at astro-kom.de wrote:
[...]
> When a command like dhcp times out and eth_init tries to switch to the other
> interface (FEC1) with eth_current->init(), U-Boot locks up. I still have to look
> further into this what exactly fails.

the lockup itself is caused by mii_discover_phy in mcfmii.c.

Apparently, phytype is detected as 0x0, and then in this loop

				for (i = 0; i < (sizeof(phyinfo) / sizeof(phy_info_t)); i++) {
					if (phyinfo[i].phyid == phytype) {
#ifdef ET_DEBUG
						printf("phyid %x - %s\n",
						       phyinfo[i].phyid,
						       phyinfo[i].strid);
#endif
						strcpy(info->phy_name, phyinfo[i].strid);
						info->phyname_init = 1;
						found = 1;
						break;
					}
				}

phytype is matched against the last entry of phyinfo erroneously:

phy_info_t phyinfo[] = {
	{0x0022561B, "AMD79C784VC"},	/* AMD 79C784VC */
[...]
	{0, 0}
};

However, I did not yet find out why phytype is detected as 0x0...

In any case, what should be the correct termination condition for
the above loop? Of course
	for (i = 0; i < (sizeof(phyinfo) / sizeof(phy_info_t) - 1); i++)
would do the trick, but it seems overly complicated to me. Any
better ideas?

Wolfgang



More information about the U-Boot mailing list